• ExtJS4.x treegrid 控件复选框的研究


    1 treegrid 简介

    最近在研究ExtJS4.x版本,官方在发布包中包含了一个treegrid插件,先看下效果:


    本人想在Controller中动态获取、设置左侧的复选框列。

    这里是官方提供的示例:http://www.ostools.net/uploads/apidocs/extjs4.1/examples/tree/treegrid.html

    这里具体的js:http://www.ostools.net/uploads/apidocs/extjs4.1/examples/tree/treegrid.js

    官方示例中提供了几种列:treecolumn、templatecolumn、actioncolumn和checkcolumn

    前三者不是本篇要说的,可以看下DEMO就明白,本篇主要说checkcolumn的动态获取与设置问题。

    treepanel是继承至Ext.tree.Panel,Store也就是Ext.data.TreeStore类型了,看先下我的几个主要类。

    注:在看本篇时请先了解ExtJS及其MVC开发模式,这不是本篇的重点,不清楚可以阅读API或本人其他文章。


    2、Controller

    Ext.define('Manage.controller.Authorize', {
        extend: 'Ext.app.Controller',
        requires: ['Ext.ux.CheckColumn'],
        stores: ['Category'],
        views: ['authorize.Config'],
        models: ['Category'],
        init: function () {
            this.control({
                'authorizeConfig button[action=selectAll]': {
                    click: this.selectAll
                }
            })
        },
        selectAll: function (button) {
            //本文后写的代码都是放在这里,请注意。
        }
    });


    Controller需要与Model、Store、View一起分析,这里需要注意引用“Ext.ux.CheckColumn”,另外在app.js中加入如下代码:

    Ext.Loader.setPath('Ext.ux', '/ExtJS/4.1/examples/ux');


    3、Model

    看下Model类:

    Ext.define('Manage.model.Category', {
        extend: 'Ext.data.Model',
        fields: ['Check', 'Code', 'Name', 'English', 'ParentCode', 'ParentName', 'UploadCode', 'UploadName',
                'IsPage', 'IsMenu', 'IsMap', 'EnableConsult', 'PageUrl', 'MenuUrl', 'Sort'],
        proxy: Ext.create('Manage.proxy.Category')
    });

    注意这里的Check字段,主要是用来映射treegrid中的checkbox列。


    4、Store

    Ext.define('Manage.store.Category', {
        extend: 'Ext.data.TreeStore',
        model: 'Manage.model.Category',
        folderSort: true,
        defaultRootId: ''
    });


    5、Proxy

    Ext.define('Manage.proxy.Category', {
        extend: 'Ext.data.proxy.Ajax',
        startParam: undefined,
        api: {
            read: '/Manage/Category/Query.aspx',
            update: '/Manage/Category/Update.aspx',
            create: '/Manage/Category/Add.aspx',
            destroy: '/Manage/Category/Delete.aspx'
        },
        reader: {
            type: 'json',
            root: 'children',
            idProperty: 'Code',
            messageProperty: 'message',
            successProperty: 'success'
        },
        writer: {
            type: 'json',
            root: ''
        }
    });

    这里实际上只用到的read,返回的json如下:

    {
        "id": 0,
        "text": "根",
        "expanded": true,
        "leaf": false,
        "children": [{
            "Code": "11",
            "Name": "数据管理",
            "English": null,
            "ParentCode": null,
            "ParentName": null,
            "UploadCode": null,
            "UploadName": null,
            "IsPage": 0,
            "IsMenu": 1,
            "IsMap": 0,
            "EnableConsult": 0,
            "PageUrl": null,
            "MenuUrl": null,
            "Sort": 1,
            "iconCls": null,
            "leaf": false,
            "expanded": true,
            "children": [{
                "Code": "1111",
                "Name": "新闻管理",
                "English": null,
                "ParentCode": "11",
                "ParentName": "数据管理",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": null,
                "Sort": 1,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            }]
        },
        {
            "Code": "12",
            "Name": "系统管理",
            "English": null,
            "ParentCode": null,
            "ParentName": null,
            "UploadCode": null,
            "UploadName": null,
            "IsPage": 0,
            "IsMenu": 1,
            "IsMap": 0,
            "EnableConsult": 0,
            "PageUrl": null,
            "MenuUrl": null,
            "Sort": 2,
            "iconCls": null,
            "leaf": false,
            "expanded": true,
            "children": [{
                "Code": "1211",
                "Name": "文章模版",
                "English": null,
                "ParentCode": "12",
                "ParentName": "系统管理",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": "tempList",
                "Sort": 1,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            }]
        },
        {
            "Code": "13",
            "Name": "系统配置",
            "English": null,
            "ParentCode": null,
            "ParentName": null,
            "UploadCode": null,
            "UploadName": null,
            "IsPage": 0,
            "IsMenu": 1,
            "IsMap": 0,
            "EnableConsult": 0,
            "PageUrl": null,
            "MenuUrl": null,
            "Sort": 3,
            "iconCls": null,
            "leaf": false,
            "expanded": true,
            "children": [{
                "Code": "1311",
                "Name": "角色管理",
                "English": null,
                "ParentCode": "13",
                "ParentName": "系统配置",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": "roleList",
                "Sort": 1,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            },
            {
                "Code": "1312",
                "Name": "管理员管理",
                "English": null,
                "ParentCode": "13",
                "ParentName": "系统配置",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": "adminList",
                "Sort": 2,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            },
            {
                "Code": "1313",
                "Name": "权限分配",
                "English": null,
                "ParentCode": "13",
                "ParentName": "系统配置",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": "authorizeConfig",
                "Sort": 3,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            },
            {
                "Code": "1314",
                "Name": "分类管理",
                "English": null,
                "ParentCode": "13",
                "ParentName": "系统配置",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": "categoryList",
                "Sort": 4,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            },
            {
                "Code": "1315",
                "Name": "文章管理",
                "English": null,
                "ParentCode": "13",
                "ParentName": "系统配置",
                "UploadCode": null,
                "UploadName": null,
                "IsPage": 0,
                "IsMenu": 1,
                "IsMap": 0,
                "EnableConsult": 0,
                "PageUrl": null,
                "MenuUrl": null,
                "Sort": 5,
                "iconCls": null,
                "leaf": true,
                "expanded": true,
                "children": []
            }]
        }]
    }

    6、View

    最后看下视图:

    Ext.define('Manage.view.authorize.Config', {
        extend: 'Ext.panel.Panel',
        alias: 'widget.authorizeConfig',
        title: '权限配置',
        resizable: false,
        layout: {
            type: 'hbox',
            align: 'stretch'
        },
        autoShow: true,
        iconCls: 'Groupkey',
        modal: true,
        buttonAlign: 'center',
        initComponent: function () {
            this.items = [
                {
                    xtype: 'grid',
                    flex: 1,
                    title: '角色列表',
                    titleAlign: 'center',
                    border: false,
                    selModel: Ext.create('Ext.selection.RowModel', { injectCheckbox: 1 }),
                    store: 'Role',
                    dockedItems: [{
                        xtype: 'pagingtoolbar',
                        store: 'Role',
                        dock: 'bottom',
                        displayInfo: true
                    }],
                    columns: [{
                        xtype: 'rownumberer',
                         40,
                        align: 'center',
                        sortable: false
                    }, {
                        header: '角色编号',
                        dataIndex: 'Code',
                        align: 'center',
                        flex: 1
                    }, {
                        header: '角色名称',
                        dataIndex: 'Name',
                        align: 'center',
                        flex: 1
                    }, {
                        header: '角色状态',
                        dataIndex: 'State',
                        align: 'center',
                        renderer: Manage.utility.Format.LockState,
                        flex: 1
                    }]
                },
                {
                     1
                },
                {
                    xtype: 'treepanel',
                    flex: 1,
                    title: '权限列表',
                    titleAlign: 'center',
                    border: false,
                    useArrows: true,
                    rootVisible: false,
                    multiSelect: true,
                    singleExpand: false,
                    store: 'Category',
                    bbar:[{
                        type: 'button',
                        iconCls: 'Bullettick',
                        action: 'selectAll',
                        text: '全选'
                    }],
                    columns: [{
                        xtype: 'checkcolumn',
                        dataIndex: 'Check',
                         40,
                        stopSelection: false
                    }, {
                        text: '编号',
                         80,
                        sortable: true,
                        dataIndex: 'Code'
                    }, {
                        xtype: 'treecolumn',
                        text: '名称',
                         100,
                        sortable: true,
                        dataIndex: 'Name'
                    }, {
                        text: '上传配置',
                         100,
                        sortable: true,
                        dataIndex: 'UploadName'
                    }, {
                        text: '管理路径',
                         100,
                        flex: 1,
                        sortable: true,
                        dataIndex: 'MenuUrl'
                    }]
                }
            ];
    
            this.buttons = [
                {
                    text: '保存',
                    action: 'submit'
                },
                {
                    text: '重置',
                    action: 'reset'
                }
            ];
    
            this.callParent(arguments);
        }
    });

    7、获取、设置Checkbox

    如下代码放在控制器中(上文已注解):

    var grid = button.up('treepanel');//获取grid对象
    var store = grid.getStore();//通过grid获取store对象,经测试不可行
    console.log(store.getCount());//这里获取不到总行数
    var table = grid.getView();//获取table对象
    //方法一
    var elems = table.getNodes();//获取所有HTMLElement对象
    for(var i=0;i<elems.length;i++){//遍历所有HTMLElement对象
        var record = table.getRecord(elems[i]);//转换成Record(Model)对象
        var check = record.get('Check');//获取checkbox
        if(check){//判断有无选中
            console.log(record.get('Code'));
        }
        record.set('Check', !check);//设置复制框
    }
    //方法二
    var tableStore = table.getStore();//由Table获取Store对象
    for(var i=0;i<tableStore.getCount();i++){
        var record = tableStore.getAt(i);//获取第i个record
        var check = record.get('Check');
        if(check){
            console.log(record.get('Code'));
        }
        record.set('Check', !check);
    }


  • 相关阅读:
    图文详解YUV420数据格式
    利用ffmpeg解码h264流的代码
    Spring Boot Thymeleaf 使用详解
    Intellij Idea更换主题
    spring boot + thymeleaf 乱码问题
    SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法
    spring-boot-starter-thymeleaf 避坑指南
    Spring Boot 官方文档学习(一)入门及使用
    Spring Security 中的 Bcrypt
    laravel5的Bcrypt加密方式对系统保存密码的小结
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3030590.html
Copyright © 2020-2023  润新知