版本4.0
1、在desktop目录下
新建一个Users.js文件
输入代码
/*!
* Ext JS Library 4.0
* Copyright(c) 2006-2011 Sencha Inc.
* licensing@sencha.com
* http://www.sencha.com/license
*/
Ext.define('MyDesktop.Users', {
extend: 'Ext.ux.desktop.Module',
requires: [
'Ext.data.JsonStore',
'Ext.util.Format',
'Ext.grid.Panel',
'Ext.grid.RowNumberer'
],
id:'users',
init : function(){
this.launcher = {
text: '用户管理',
iconCls:'icon-grid'
};
},
createWindow : function(){
var desktop = this.app.getDesktop();
var win = desktop.getWindow('users-grid');
var required = '<span style="color:red;font-weight:bold" data-qtip="Required">* </span>';
Ext.define('Fly.model.User', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
type:'int'
},{
name: 'userName',
type:'string'
},{
name: 'userPasswd',
type:'password'
},{
name: 'userPermiss'
},{
name: 'description',
type:'string'
},{
name: 'logintimes',
type:'int'
}]
});
var userStore = Ext.create('Ext.data.Store', {
autoLoad: true,
autoDestroy: true,
storeId: 'userStore',
model:'Fly.model.User',
proxy: {
actionMethods:{
create: "POST",
read: "POST",
update: "POST",
destroy: "POST"
},
type: 'ajax',
api: {
create : 'user/adduser.shtml',
read : 'user/userslist.shtml',
update : 'user/updateuser.shtml',
destroy : 'user/delete.shtml'
},
reader: {
type: 'json',
root: 'rows',
idProperty: 'id'
}
}
});
//下拉框数据。
var cbstore = Ext.create('Ext.data.ArrayStore', {
autoDestroy : true,
fields: ['id', 'name'],
data : [[0,"管理员"],[1,"操作员"],[2,"浏览员"]]
});
Ext.apply(Ext.form.VTypes, {
confirmPwd : function(val, field) {
if (field.confirmPwd) {
var firstPwdId = field.confirmPwd.first;
var secondPwdId = field.confirmPwd.second;
this.firstField = Ext.getCmp(firstPwdId);
this.secondField = Ext.getCmp(secondPwdId);
var firstPwd = this.firstField.getValue();
var secondPwd = this.secondField.getValue();
if (firstPwd == secondPwd) {
return true;
} else {
return false;
}
}
},
confirmPwdText : '两次输入的密码不一致!'
});
if(!win){
var userid;
var usergrid = Ext.create('Ext.grid.Panel',{
flex:2,
frame: true,
title:'用户列表',
store: userStore,
layout: 'column',
columns: [
new Ext.grid.RowNumberer(),
{
text: "ID",
flex: 1,
dataIndex: 'id'
},{
text: "用户名",
flex: 2,
dataIndex: 'userName'
},{
text: "权限",
flex: 1,
dataIndex: 'userPermiss',
renderer:function(v){
if (v == 0) return "管理员";
if (v == 1) return "操作员";
if (v == 2) return "浏览员";
}
},{
text: "描述",
flex: 3,
dataIndex: 'description'
},{
text: "登陆次数",
flex: 1,
dataIndex: 'logintimes'
}],
listeners: {
selectionchange: function(model, records) {
if (records[0]) {
userid = records[0].data.id;
Ext.getCmp('userForm').loadRecord(records[0]);
Ext.getCmp('user_save').setDisabled(false);
Ext.getCmp('userForm').remove('reUserPasswd');
Ext.getCmp('user_update').setDisabled(false);
Ext.getCmp('user_delete').setDisabled(false);
Ext.getCmp('user_save').setText('增加');
}
}
}
});
var userform = Ext.widget({
flex:1,
title:'用户编辑',
xtype: 'form',
frame: true,
id: 'userForm',
bodyPadding: 10,
layout:'anchor',
fieldDefaults: {
labelStyle:'font-weight: bold;text-align:right',
labelWidth: 70
},
defaultType: 'textfield',
items: [{
id:'user-name',
fieldLabel: '用户名',
beforeLabelTextTpl: required,
name: 'userName',
allowBlank:false,
enableKeyEvents: true,
listeners:{
//事件监听,当用户离开输入框——失去焦点时执行
'blur':function(){
Ext.Ajax.request({
url:'checkname.shtml?loginName='+Ext.getCmp('user-name').getValue(),
method:'post',
success: function(response,opts){
var respText=Ext.decode(response.responseText);
if(respText.success == true){
//根据ajax请求返回的数据信息手动的进行设置该字段无效
Ext.getCmp('user-name').markInvalid('该用户名已被使用');
}
}
});
}
}
},{
fieldLabel: '类型',
beforeLabelTextTpl: required,
xtype: 'combobox',
store: cbstore,
displayField: 'name',
valueField: 'id',
name: 'userPermiss',
forceSelection:true,
allowBlank:false
},{
fieldLabel: '描述',
name: 'description',
xtype:'textarea'
},{
id:'password',
fieldLabel: '密码',
beforeLabelTextTpl: required,
name: 'userPasswd',
blankText : '密码不能为空',
regex : /^[\s\S]{6,32}$/,
regexText : '密码长度必须大于6小于32',
inputType : 'password',
allowBlank:false
}],
buttons: [{
id:'user_save',
text: '增加',
maxWidth:55,
handler:function(){
var user_form = this.up('form');
if(this.getText() == '增加'){
if(!Ext.get('reUserPasswd')){
user_form.add({
id:'reUserPasswd',
name:'reUserPasswd',
fieldLabel: '确认密码',
beforeLabelTextTpl: required,
confirmPwd : {
first : 'password',
second : 'reUserPasswd'
},
inputType : 'password',
vtype : 'confirmPwd',
regex : /^[\s\S]{6,32}$/,
regexText : '密码长度必须大于6小于32',
allowBlank:false
})
}
user_form.getForm().reset();
Ext.getCmp('user_update').setDisabled(true);
Ext.getCmp('user_delete').setDisabled(true);
this.setText('保存');
}else{
if(user_form.getForm().isValid()){
user_form.getForm().submit({
url: 'user/adduser.shtml',
submitEmptyText: false,
waitTitle:'请等待',
waitMsg: '正在添加用户...',
success:function(form,action){
var response = Ext.decode(action.response.responseText);
Ext.Msg.alert('提示', response.msg);
userStore.load();
},
failure:function(form,action){
Ext.Msg.alert('提示', '添加用户失败!');
}
});
}else{
Ext.Msg.alert('提示', '数据验证失败!');
}
this.setText('增加');
Ext.getCmp('userForm').remove('reUserPasswd');
Ext.getCmp('user_update').setDisabled(false);
Ext.getCmp('user_delete').setDisabled(false);
}
}
},{
id:'user_update',
text: '编辑',
maxWidth:55,
handler:function(){
var user_form = this.up('form');
if(user_form.getForm().isValid()){
user_form.getForm().submit({
url: 'user/updateuser.shtml',
submitEmptyText: false,
waitTitle:'请等待',
waitMsg: '正在编辑用户...',
params : {
id : userid
},
success:function(form,action){
var response = Ext.decode(action.response.responseText);
Ext.Msg.alert('提示', response.msg);
userStore.load();
},
failure:function(form,action){
Ext.Msg.alert('提示', '编辑用户失败!');
}
});
}else{
Ext.Msg.alert('提示', '数据验证失败!');
}
}
},{
id:'user_delete',
text: '删除',
maxWidth:55,
handler: function() {
Ext.Ajax.request({
url:'user/delete.shtml?ids='+userid,
method:'post',
waitTitle:'请等待',
waitMsg: '正在删除用户...',
params : {
id : userid
},
success:function(response,opts){
var respText=Ext.decode(response.responseText);
if(respText.success == true){
Ext.Msg.alert('提示', respText.msg);
userStore.load();
}
},
failure:function(form,action){
Ext.Msg.alert('提示', '删除用户失败!');
}
});
}
},{
text: '取消',
maxWidth:55,
handler: function() {
this.up('form').getForm().reset();
}
}]
});
win = desktop.createWindow({
id: 'users-grid',
title:'用户管理',
width:800,
height:500,
iconCls: 'icon-grid',
layout: {
type: 'hbox',
align: 'stretch',
defaultMargins:{
top: 1,
right: 1,
bottom: 1,
left: 1
},
padding:0
},
items: [
usergrid,
userform
]
});
}
return win;
}
});注意id:是users。后面要用到
2、修改desktop目录下的app.js文件
1)在requires中添加'MyDesktop.Users'
2)在getModules中添加new MyDesktop.Users()
3)在getDesktopConfig下的shortcut下的data中添加
{ name: 'Grid Window2', iconCls: 'grid-shortcut', module: 'users' }
其中module:‘’ 里面是设置的ID
双击desktop.html发现出现乱码
解决方案:
1、编辑desktop.html
把<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
上的iso-8859-1改为UFT-8
2、用记事本打开Users.js
点击另存为,
把下面的编码修改为UFT-8
用新文件替代原有文件
修改图标
{ name: 'Grid Window2', iconCls: 'grid-shortcut', module: 'users' },
这行代码中的iconCls就是指图标,
新建一个图片。命名为bmap.jpg,拷贝到images目录下、图片的像素是48*46
编辑desktop.css
输入代码
.bmap-shortcut {
background-image: url(../images/bmap.jpg);
}把{ name: 'Grid Window2', iconCls: 'grid-shortcut', module: 'users' },
中的grid换为bmap
extjs有个自己的预编译,如果你执行完,打开网页,显示了图片之后,在换个图片,是没有效果的,因为他已经保存原有图片了,需要新建个bmap2,修改路径上的../images/bmap2.jpg才能生效
本文详细介绍了如何在ExtJS框架下创建一个桌面应用,包括模块的定义、窗口的创建、用户界面的设计以及数据存储与操作。通过实例展示了如何实现用户管理功能,包括用户列表展示、添加、编辑和删除操作。

1093

被折叠的 条评论
为什么被折叠?



