• 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'
                });

    窗体的确定事件,

  • 相关阅读:
    命令行参数
    数组的使用
    Hello World 和 模块分解
    20155234 2016-2017-2 《Java程序设计》第2周学习总结
    20155234 2016-2017-2 《Java程序设计》第1 周学习总结
    与虚拟机和linux的初次接触
    优秀技能经验及对java学习展望
    预备作业01
    20155231 实验三 敏捷开发与XP实践
    20155231 第十一周课堂代码练习
  • 原文地址:https://www.cnblogs.com/Dtscal/p/2883777.html
Copyright © 2020-2023  润新知