NHibernate3.3.0GA+ExtJS4.1.1+ASP.NET MVC3.0权限管理系统(3)--Grid编辑

        框架页做好后,接下来我们开始Grid的demo吧,在管理系统中信息的增删改查是家常便饭,也是最多的操作了。好了,还是先上图,再贴代码。

以上是关于菜单编辑的界面,代码中我们也会包含tab添加的代码,这在上一章中没有贴出代码。

按照MVC,按照模块划分,权限管理模块,我们统一放在SystemManage文件下,具体的文件结构如下:

 

主界面显示部分采用的tab部分,是通过左侧的tree点击事件来实现的,实现代码为(2)中注释掉的部分,如下:

Ext.define('RoleManage.controller.WestTree', {
    extend: 'Ext.app.Controller',
    stores: ['WestTree'],
    models: ['WestTree'],
    views: ['WestTree'],

    init: function () {
	//初始化部分,下面是部分是给菜单绑定单击事件,接下来会用,这里先注释
        this.control({
            'WestTree': {//树节点单击事件
              itemclick: function (tree, record, item, index, e, eOpts) {
                    var tab = Ext.getCmp('CenterTabPanel')[0];//根据id获取组件对象..
                    var currentTab = tab.getComponent(tabID);//如果没有找到相关id的tab,向tab组件新增一个id为tabID的选项卡
                    if (!currentTab) {
                        tab.add(
                        {
                            id: record.data.url,//节点菜单的url作为选项卡的id
                            title: record.data.text,
                            xtype: record.data.url,
                            closable: true,
                        }).show();
                    } else {
                        tab.setActiveTab(currentTab);
                    }
                }
          }
          });
    }

});


 

 

A.view/SystemManage/menu/List.js

Ext.define('RoleManage.view.SystemManage.menu.List', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.menulist',
    id: 'menulist',
    title: '菜单列表',
    region: 'center',
    store: 'SystemManage.Menu',
    tbar:  Ext.create('Ext.Toolbar', {//添加工具栏按钮--新增,修改,删除按钮
        xtype: 'toolbar',
        items: [
        { id: 'add', action: 'add', text: '新增菜单', iconCls: 'add'}, '-',
        { id: 'edit', action: 'edit', text: '修改菜单', iconCls: 'option' }, '-',
        { id: 'delete', action: 'delete', text: '删除菜单', iconCls: 'remove' }
    ]}),
    initComponent: function () {//设置Grid显示信息列
        this.columns = [
              { header: '编号', dataIndex: 'id', flex: 1 },
              { header: '菜单名称', dataIndex: 'vcName', flex: 1 },
              { header: '地址', dataIndex: 'vcUrl', flex: 1 }
        ];
        this.callParent(arguments);
    }
});

 

B.view/SystemManage/menu/Edit.js

Ext.define('RoleManage.view.SystemManage.menu.Edit', {
    extend: 'Ext.window.Window',
    alias: 'widget.menuedit',
    title: '菜单编辑',
    layout: 'fit',
    autoShow: true, 
    initComponent: function () {
        this.items = [{
            xtype: 'form',
            frame:true,
            items: [{
                xtype: 'textfield',
                name: 'id',
                fieldLabel: '编号'
            },
                {
                    xtype: 'textfield',
                    name: 'vcName',
                    fieldLabel: '菜单名称'
                },
                {
                    xtype: 'textfield',
                    name: 'vcName',
                    fieldLabel: '上级菜单'
                },
                {
                    xtype: 'textfield',
                    name: 'iParent',
                    fieldLabel: '上级菜单'
                },
                {
                    xtype: 'textfield',
                    name: 'vcPictureUrl',
                    fieldLabel: '图片URL'
                },
                {
                    xtype: 'textfield',
                    name: 'iGroup',
                    fieldLabel: '序号'
                },
                {
                    xtype: 'textfield',
                    name: 'vcUrl',
                    fieldLabel: '地址URL'
                }
                ]
        }];
        this.buttons = [{
            text: '保存',
            action: 'save'
        },
            {
                text: '取消',
                scope: this,
                handler: this.close
            }];
        this.callParent(arguments);
    }
}); 

 

 

C.controller/SystemManage/Menu.js

Ext.define('RoleManage.controller.SystemManage.Menu', {
    extend: 'Ext.app.Controller',
    stores: ['SystemManage.Menu'],
    models: ['SystemManage.Menu'],

    views: [
         'SystemManage.menu.List',
         'SystemManage.menu.Edit'
    ],

    init: function () {
        //添加按钮时间
        this.control({
          //Grid的行双击事件,调用方法为editMenu
            'menulist': {
                itemdblclick: this.editMenu
            },
          //添加按钮事件,调用方法为showAddMenu
            'menulist button[action=add]': {
                click: this.showAddMenu
            },
           //修改事件,调用方法为showEditMenu
            'menulist button[action=edit]': {
                click: this.showEditMenu
            },
          // 删除按钮事件,调用方法为showDeleteMenu
            'menulist button[action=delete]': {
                click: this.showDeleteMenu
            },
          // 编辑界面保存按钮事件
            'menuedit button[action=save]': {
                click: this.updateMenu
            }
        });
    },
    editMenu: function (grid, record) {
       //通过xtype创建实例
        var view = Ext.widget('menuedit');
       //读取双击选中行的id数据
        var id = record.get('id');
         view.down('form').load({
                frame: true,
                waitMsg: '正在加载数据请稍后', //提示信息
                   waitTitle: '提示' //标题
                // url: 'Menu/GetDataByID', //请求的url地址
                // params: { id: id },
              // method: 'GET', //请求方式
                //failure: function (form, action) {//加载失败的处理函数
                //   Ext.Msg.alert('提示', '数据加载失败');
              //}
            });
            view.show();
    },
    showAddMenu: function () {
        var view = Ext.widget('menuedit');
        var form = view.down('form');
        form.load({
            frame: true,
            waitMsg: '正在加载数据请稍后', //提示信息
            waitTitle: '提示' //标题
        });
        view.show();
    },
    showEditMenu: function () {
        var objGrid = Ext.getCmp('menulist');//根据向ConterTabPanel添加的Grid组件id读取对象
        var data = objGrid.getSelectionModel().getSelection();
        if (data.length == 0) {
            Ext.Msg.alert('提示', '请至少选择一条数据!');
        } else {
            var s = data[0].get('id');
            var view = Ext.widget('menuedit');
            var form = view.down('form');
            form.load({
                frame: true,
                waitMsg: '正在加载数据请稍后', //提示信息
                   waitTitle: '提示' //标题
                //url: 'Menu/GetDataByID', //请求的url地址
                //params: { id: s },
              //method: 'GET', //请求方式
                //failure: function (form, action) {//加载失败的处理函数
                //  Ext.Msg.alert('提示', '数据加载失败');
              //}
            });
            view.show();

        }
    },
    showDeleteMenu: function () {

    },
    updateMenu: function (button) {
        var win = button.up('window');
        form = win.down('form');
        form.form.submit({
            waitMsg: '',
            waitTitle: '',
            url: 'Menu/Edit',
            method: 'POST'
        });
    }

});

 

 

D.model/SystemManage/Menu.js

Ext.define('RoleManage.model.SystemManage.Menu', {
    extend: 'Ext.data.Model',
    fields: ['id','vcName','iParent','vcPictureUrl','iGroup','vcUrl']
}); 

 

E.store/SystemManage/Menu.js

Ext.define('RoleManage.store.SystemManage.Menu', {
    extend: 'Ext.data.Store',
    model: 'RoleManage.model.SystemManage.Menu',
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: '../../data/menuInfo.json',
        reader: {
            type: 'json',
            root: 'menus',
            successProperty: 'success'
        }
    }
}); 


 在添加了以上的js文件之后,最后我们还需要将定义的controller在app.js中进行加载。

Ext.Loader.setConfig({ enabled: true });
Ext.application({
    name: 'RoleManage',
    autoCreateViewport: true,
    appFolder: 'app', //应用文件夹名字
    
    controllers: [//加载controller文件夹下定义controllers的WestTree,SystemManage.Menu
         'WestTree','SystemManage.Menu'
    ]

});

 

       当项目逐渐完善的过程中,我们需要的controller也会增多,那每添加一个controller,我们就要在app.js中修改一次,这样不仅麻烦,而且当controller量很大的时候,app.js中的内容就会显得很凌乱,阅读性会降低。那么,我们是不是可以动态的加载controller呢?

 

 推荐下自己的淘宝小店女装:诗语情裳

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值