0

此代码在 4.x 中可以正常工作。目标是通过单击打开/关闭树项目。在 5.x 中单击后发生错误:“self.getTreeStore 不是函数”我在 API 文档中找不到相关更改。你能告诉我为什么 4.x 和 5.x 的工作方式不同吗?

Ext.onReady(function(){
    Ext.create('Ext.tree.Panel', {
        border: false,
        height: 200,
        listeners: { itemclick: function(self, record, item, index, event) {
                       if (record.data.href=='') {
                         var Enode=self.getTreeStore().getNodeById(record.internalId);
                         if (Enode.isExpanded()) 
                           Enode.collapse();
                         else
                           Enode.expand();
                       } } },
        rootVisible: false,
        width: 200,
        root: {
            children: [ { 
               text: 'Menu 1',
               children: [{ text: 'Menu 1.1',leaf: true }]
            } ] },
        renderTo: Ext.getBody()
    });
});

问候,安妮

4

2 回答 2

2

在 5.0 中,您可以调用 justtree.getStore()tree.getRootNode().getTreeStore()where treeis instance of Ext.tree.Panel.

但是在您的情况下您不需要这样做,因为recordin itemclickhandler 具有来自NodeInterface. 试试这个:

itemclick: function(self, node, item, index, event) {
    if (node.data.href=='') {
        if (node.isExpanded()) {
            node.collapse();
        } else {
            node.expand();
        }
    } 
}

工作示例:http: //jsfiddle.net/9KJME/1/

于 2014-07-20T13:14:23.440 回答
1

@Lolo 描述了解决方案。至于为什么它的工作方式不同 -self参数是 a Ext.tree.View,而不是 a Ext.tree.Panel。它有不同的方法。

Ext.tree.View确实有getStore()方法,但没有getRootNode()

于 2014-07-21T10:48:36.813 回答