ext4的treePanel点击触发alert

简介:

实现如下所示的效果:
_
这是一个viewport的经典border类型layout布局
左侧也就是west的panel是treePanel,这个panel的数据源是一个store,当treePanel的item被点击,会触发alert代码。
首先为我们viewport也就是treepanel所在的页面,添加一个Basic Event Binding如下图所示
_
然后为这个event binding配置属性:方法名fn和事件名itemclick,如下图
_
其中具体的代码为:

    agentTreeItemClick: function(dataview, record, item, index, e, eOpts) {

        var rid = "uselessStr";
           rid = record.raw.id;
        if (rid.indexOf("agent") != -1){
            //包含agent字符串,所以什么也不做
            //Ext.Msg.alert("菜单信息","record.raw.id:"+record.raw.id+"  record.raw.text:"+record.raw.text);
        }else{
            //不包含agent字符串,所以显示
            Ext.Msg.alert("菜单信息","record.raw.id:"+record.raw.id+"  record.raw.text:"+record.raw.text);
        }

    }

从上面的代码可以看到,我们需要获取treepanel中root节点下的children的id和text
所以我们要去看看treepanel对应的store中的对应数据
下面列举整个store的代码:

Ext.define('MyApp.store.LeftAgentStore', {
    extend: 'Ext.data.TreeStore',

    requires: [
        'Ext.data.Field'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            storeId: 'LeftAgentStore',
            root: {
                text: '代理店',
                id: 'agent-root',
                expanded: true,
                children: [
                    {
                        text: '北京代理店',
                        id: 'agent-bj',
                        expanded: true,
                        children: [
                            {
                                text: '详细信息',
                                id: 'detailInfo-bj',
                                leaf: true
                            },
                            {
                                text: '团队',
                                id: 'groupInfo-bj',
                                leaf: true
                            },
                            {
                                text: '文件夹',
                                id: 'folderInfo-bj',
                                leaf: true
                            }
                        ]
                    },
                    {
                        text: '上海代理店',
                        id: 'agent-sh',
                        expanded: true,
                        children: [
                            {
                                text: '详细信息',
                                id: 'detailInfo-sh',
                                leaf: true
                            },
                            {
                                text: '团队',
                                id: 'groupInfo-sh',
                                leaf: true
                            },
                            {
                                text: '文件夹',
                                id: 'folderInfo-sh',
                                leaf: true
                            }
                        ]
                    }
                ]
            },
            fields: [
                {
                    name: 'text'
                }
            ]
        }, cfg)]);
    }
});

我们可以看出来,我们在store的root中手动添加了树形菜单的全部数据,其中特别为每一个菜单项提供了id字段
然后我们的viewport中的event binding所创建的fn中特别判断了id的值,如果rid.indexOf("agent") != -1,也就是如果rid这个字符串中包含了agent这个字符串,那么说明不是叶子节点leaf,就什么也不做,如果不包含那么弹出alert窗体。
下面我们罗列所有的代码
主页代码

Ext.define('MyApp.view.MainVP', {
    extend: 'Ext.container.Viewport',
    alias: 'widget.mainvp',

    requires: [
        'Ext.toolbar.Toolbar',
        'Ext.button.Button',
        'Ext.tree.Panel',
        'Ext.tree.View'
    ],

    layout: 'border',

    initComponent: function() {
        var me = this;

        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'panel',
                    region: 'north',
                    height: 103,
                    itemId: 'topPanel',
                    title: 'PWST服务系统',
                    dockedItems: [
                        {
                            xtype: 'toolbar',
                            dock: 'bottom',
                            itemId: 'topToolBar',
                            items: [
                                {
                                    xtype: 'button',
                                    itemId: 'agentBTN',
                                    text: '代理店'
                                },
                                {
                                    xtype: 'button',
                                    itemId: 'orgBTN',
                                    text: '组织'
                                }
                            ]
                        }
                    ]
                },
                {
                    xtype: 'treepanel',
                    region: 'west',
                    split: false,
                    itemId: 'leftAgentTree',
                    width: 150,
                    collapsed: false,
                    collapsible: true,
                    title: '导航栏',
                    store: 'LeftAgentStore',
                    viewConfig: {

                    },
                    listeners: {
                        itemclick: {
                            fn: me.agentTreeItemClick,
                            scope: me
                        }
                    }
                },
                {
                    xtype: 'treepanel',
                    region: 'west',
                    split: false,
                    hidden: true,
                    itemId: 'leftOrgTree',
                    width: 150,
                    collapsed: false,
                    collapsible: true,
                    title: 'PWST组织',
                    store: 'LeftOrgStore',
                    viewConfig: {

                    }
                }
            ]
        });

        me.callParent(arguments);
    },

    agentTreeItemClick: function(dataview, record, item, index, e, eOpts) {

        var rid = "uselessStr";
           rid = record.raw.id;
        if (rid.indexOf("agent") != -1){
            //包含agent字符串,所以什么也不做
            //Ext.Msg.alert("菜单信息","record.raw.id:"+record.raw.id+"  record.raw.text:"+record.raw.text);
        }else{
            //不包含agent字符串,所以显示
            Ext.Msg.alert("菜单信息","record.raw.id:"+record.raw.id+"  record.raw.text:"+record.raw.text);
        }

    }

});

store的完整代码之前已经提供

目录
相关文章
|
5月前
|
JavaScript
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
如何解决ElementUI中的el-tab-pane组件使用v-show不生效的问题?
349 3
|
3月前
|
JavaScript
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
233 49
el-menu导航报错Missing required prop: "index"、点击只有一级菜单时不合上其他已展开菜单
el-menu导航报错Missing required prop: "index"、点击只有一级菜单时不合上其他已展开菜单
273 0
|
JavaScript
uniapp真机调试文件查找失败:‘./pages/index/index.nvue?mpType=page‘; Error: Cannot find module ‘pages/
uniapp真机调试文件查找失败:‘./pages/index/index.nvue?mpType=page‘; Error: Cannot find module ‘pages/
1651 0
Element-UI. el-select 选中对象
Element-UI. el-select 选中对象
231 0
|
JavaScript 前端开发
ext的treePanel触发tabPanel
最终的效果如下图所描述上述效果的实现过程如下所示直接上代码如上图所示,我们点击treePanel触发tabPanel的变化,因此肯定是treePanel中添加了事件响应的代码没错,就是这个它的具体代码如下 //鼠标点击treePanel的item,然后触发tabPanel新增tab,所以必须首先获取tabPanel的对象 var tab = Ext.
1243 0
|
容器 开发者
Ext6使用tabPanel关闭tab再打开报错的解决
使用chrom浏览器的开发者工具的console追溯报错信息如下: Uncaught Error:Cannot add destroyed item 'panel-1043' to Container 'centertab-1021'
1516 0