1

遇到问题,不确定如何进行调试。发现一个看起来几乎和我一模一样的问题,但是解决方案不起作用:如何从 ExtJs 4 中的 (MVC) 控制器捕获树节点点击?

我在该问题和我的问题之间看到的唯一区别是,我的树是直接在我的布局中作为项目对象创建的,使用xtypetreepanel是单独创建的项目对象。

这是我的控制器:

Ext.define("IOL.controller.app.AppLayout", {
    extend: 'Ext.app.Controller',
    init: function() {
        this.control({
            'app toolbar > button[itemId=filter]' : {
                click: this.onFilter
            },
            'menuTree': {
                itemclick: this.onFilter
            }
        });
    },

    onFilter: function(btn) {
        alert('test');
        Ext.create('IOL.view.app.Home').show();
    }

});

这是我认为的相关项目:

{
        xtype: 'treepanel',
        title: 'Navigation',
        split: true,
        collapsible: true,
        margins: '5 0 5 5',
        region: 'west',
        width: 170,
        id: 'menuTree',
        alias: 'widget.menuTree',
        store: Ext.create('IOL.store.app.AppNav'),
        useArrows: true,
        rootVisible: false
        /*listeners : {
            itemdblclick : function(view,rec,item,index,eventObj) {

                console.log(view);
                console.log(rec);
                console.log(item);
                console.log(index);
                console.log(eventObj);
                if(rec.get('leaf') == true){
                    Ext.ComponentQuery.query('tabpanel')[0].add({
                        xtype: 'panel',
                        title: rec.get('text'),
                        itemId: rec.get('id'),
                        //url: 'server/HomeTab/read.php',
                        html : 'test content name: ' + rec.get('id'),
                        closable : true
                    });
                }

            }
        }*/
    }

该按钮的控件app toolbar > button[itemId=filter]有效,但是将相同的操作分配给“menuTree”不起作用。浏览器控制台带回了一个有效的对象,Ext.getCmp('menuTree')所以我不知道为什么控制器似乎没有在树上起作用。

树是从商店加载的,这让我想知道这是否与需要使用.on('click')而不是.click()在 jQuery 中使用的场景类似......几乎就像控制器没有看到树(但在同一个视图中看到按钮?)。我故意直接在树上注释掉了处理程序(这确实有效)。

如果有帮助,可以提供所有文件。

4

1 回答 1

4

Ext.getCmp() 通过id返回组件,而控制器使用 Ext.ComponentQuery.query() 语法来查找它们的组件;如此有效地你试图用不存在的 xtype menuTree 控制一个组件。您应该使用“#menuTree”或“treepanel”作为选择器。

于 2012-08-24T19:24:15.363 回答