在extjs4的desktop例子中添加自己的东西

本文详细介绍了如何在ExtJS框架下创建一个桌面应用,包括模块的定义、窗口的创建、用户界面的设计以及数据存储与操作。通过实例展示了如何实现用户管理功能,包括用户列表展示、添加、编辑和删除操作。

版本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才能生效











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值