如何从Tree中的事件处理程序访问根节点?

时间:2014-11-27 12:44:58

标签: extjs extjs4

如何从Ext.tree.Panel内的事件处理程序访问我的treepanel?

以下itemClick代码不起作用。我尝试了'up''down'

Ext.create('Ext.tree.Panel', {
    title: 'Example Tree',
    width: 200,
    height: 450,
    store: store,

    listeners: {
        itemclick: function(dv, record, item, index, e) {

            var me = this;
            var panel = me.up('treepanel');
            var rn = panel.getRootNode(); //panel undefined :(
        }
    }
}

但是,如果我在工具栏中有一个按钮,它可以正常工作:

dockedItems: [{
    xtype: 'toolbar',
    dock: 'bottom',
    items: [{
        text: 'Search',
        handler: function () {
            var me = this;
            var panel = me.up('treepanel');
            var rn = panel.getRootNode(); // :)
        }
    }]
}]

这两个示例都在此fiddle中说明。

2 个答案:

答案 0 :(得分:0)

这是范围在ExtJS中的工作方式(更具体地说,在Javascript中)。在第一个例子中,'这个(我)它自己就是treepanel。试试以下

`listeners: {
        itemclick: function(dv, record, item, index, e) {

            //var me = this;
            //var panel = me.up('treepanel');
           var panel = this; //'this' is treepanel
            var rn = panel.getRootNode(); 
        }
    }`

来到第二个例子,如果你观察配置模式,它是一个快捷方式模式,用于在工具栏中创建一个按钮,因此'这个'成为按钮,您可以逐个组件查询。

答案 1 :(得分:0)

当你在面板内时,Bala的方法应该有效。如果它不尝试如下。 itemclick函数的第一个参数是视图。您可以从中获取面板。

listeners: {
    itemclick: function(dv, record, item, index, e) {
        var panel = dv.up('treepanel');
        var rn = panel.getRootNode(); 
    }
}