Ext 从一个grid窗体中选择数据到另一个grid

需求:

做权限管理创建一个角色的时候往往需要初始化权限(即选择该角色下的菜单节点,然后对菜单节点的操作权限:查|增|删|改.)到初始化页面的时候,有一个gridpanel来盛放被选择的节点和权限(权限可改),grid上面有个增加按钮.点击增加按钮弹出窗体,所有菜单节点.(可选)选择对应的菜单把该信息传递至,grid.如下图:

然后点击下一步,把grid中数据提交到后台.

自己的解决方法:

1,先把页面内容构造出来,即gridpanel,win.

  //自定义模型权限模型
    Ext.define('Permission', {
        extend: 'Ext.data.Model',
        fields: [
            {name:'key', type: 'string'},
            {name:'fullkey',type:'string'},
            {name:'text',type:'string'},
            {name:'remark',type:'string'},
            {name: 'permission', type: 'int', defaulValue: 3}
        ]
    });
 //combox编辑模式
    var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
        clicksToEdit: 1
    });

    //页面grid
    var grid=Ext.create('Ext.grid.Panel', {
        title: '权限信息',
        height: 400,
        store: permissionstore,
        frame: true,
        tbar: Ext.create('Ext.Toolbar',{
            items: ['->',{
                text: '增加权限',
                icon: rootPath+'ext/images/add.png',
                handler: selectPermissions
            }]
        }),
        renderTo: panelEl,
        selModel: {
            selType: 'cellmodel'
        },
        columns:[{
            header: '权限节点',
            align    : 'left',
            width    : 70,
            flex: 1,
            sortable : false,
            dataIndex: 'fullkey'
        }, {
            header:'权限名称',
            align:'left',
            60,
            flex:1,
            dataIndex:'text'
        },{
            header:'权限',
            align:'left',
            80,
            flex:1,
            dataIndex:'remark'
        },{
            header: '权限',
            width    : 60,
            align    : 'center',
            sortable : false,
            dataIndex:'permission',
            editor: Ext.create('Ext.form.ComboBox',{
                typeAhead: true,
                transform: 'permission',
                valueField: 'key',
                displayField: 'ke',
                store:Ext.create('Ext.data.Store', {
                    fields: ['key', 'ke'],
                    data: [
                        {key:1,ke:"允许"},

                        {key:2,ke:"隐藏"},
                        {key:3,ke:"未知"},
                        {key:4,ke:"拒绝"}
                    ]
                }),
                listClass: 'x-combo-list-small'
            })
        }],
        plugins: [cellEditing]
    });

注意上面的按钮事件,代码如下

 //选择权限
    function selectPermissions(){
        if(!win){
            //在模型之中增加一个复选属性,这里增加了这个字段就可以使用Tree.getChecked
            Ext.define('Permissions', {
                extend: 'Ext.data.Model',
                fields: [
                    {name:'id',type:'string'},
                    {name:'key',type:'string'},
                    {name:'text',type:'string'},
                    {name:'remark',type:'string'},
                    {name:'fullKey',type:'string'},
                    {name:'checked', type:'bool', defaulValue:false }
                ],
                idProperty: 'Id'
            });

            //权限树形节点模型
            var store = Ext.create('Ext.data.TreeStore', {
                model: 'Permissions',
                proxy: {
                    type: 'ajax',
                    url: rootPath + 'permission/list/get',
                    simpleSortMode: true
                },
                autoLoad:true
            });

            //临时储存选中的权限的模型
            var temp=[];

            //这里只是需要定义显示的三个字段或者模型中存在的字段就可以
            var treeGrid = Ext.create('Ext.tree.Panel', {
                border:false,
                useArrows: true,
                rootVisible: false,
                store: store,
                multiSelect: true,
                singleExpand: true,
                columns: [{
                    xtype: 'treecolumn',
                    text: '权限节点',
                    flex: 2,
                    sortable: true,
                    dataIndex: 'key'
                },{
                    text: '权限名称',
                    flex: 1,
                    sortable: true,
                    dataIndex: 'text',
                    align: 'left'
                },{
                    text: '权限说明',
                    flex: 1,

                    dataIndex: 'remark',
                    sortable: false
                }
            ]
            });

            //创建窗体
            win = Ext.create('widget.window', {
                title: '选择权限',
                closeAction: 'hide',
                 600,
                height: 400,
                minWidth: 600,
                minHeight: 400,
                layout: 'fit',
                modal:true,
                resizable: true,
                items: treeGrid,
                buttons:[{
                    text:'确定',
                    handler:function(){
                      this.up('window').hide();

                      //这里取得选中的行
                      var rcs = treeGrid.getChecked();

                      //如果重复选择就把以前的删除然后再插入
                      if(temp.length>0)
                        temp.splice(0,temp.length)

                      for(var i=0; i<rcs.length; i++) {
                            temp.push({
                                key:rcs[i].get('key'),
                                fullkey:rcs[i].get('fullKey'),
                                text:rcs[i].get('text'),
                                remark:rcs[i].get('remark'),
                                permission:'3'
                            });
                      }
                      permissionstore.loadData(temp);
                    }
                },{
                    text:'取消',
                    handler:function(){
                        this.up('window').hide();
                    }
                }]
            });
        }
        win.show();
    }

关键代码,

//在模型之中增加一个复选属性,这里增加了这个字段就可以使用Tree.getChecked
            Ext.define('Permissions', {
                extend: 'Ext.data.Model',
                fields: [
                    {name:'id',type:'string'},
                    {name:'key',type:'string'},
                    {name:'text',type:'string'},
                    {name:'remark',type:'string'},
                    {name:'fullKey',type:'string'},
                    {name:'checked', type:'bool', defaulValue:false }//这个属性是杜撰出来的,从数据库加载出来的字段没有这个属性,它是专门下面TreeStrore而存在的.树形旁边的复选框的值就是这里杜撰出来的.
                ],
                idProperty: 'Id'
            });

窗体的确定事件,

原文地址:https://www.cnblogs.com/Dtscal/p/2883777.html