Ext.tree.Panel、itemclick、getTreeStore() 在 5.x 中找不到,但在 4.x 中有效

Posted

技术标签:

【中文标题】Ext.tree.Panel、itemclick、getTreeStore() 在 5.x 中找不到,但在 4.x 中有效【英文标题】:Ext.tree.Panel, itemclick, getTreeStore() not found in 5.x but works in 4.x 【发布时间】:2014-09-10 22:17:13 【问题描述】:

此代码在 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()
    );
);

问候, 安妮

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

在 5.0 中,您可以只调用 tree.getStore()tree.getRootNode().getTreeStore(),其中 treeExt.tree.Panel 的实例。

但您不需要这样做,因为record 中的itemclick 处理程序具有来自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/

【讨论】:

以上是关于Ext.tree.Panel、itemclick、getTreeStore() 在 5.x 中找不到,但在 4.x 中有效的主要内容,如果未能解决你的问题,请参考以下文章

对于 Ext.tree.Panel 节点,即使使用了 useArrow 属性,也不会显示箭头按钮

解决Ext 4.0.7 tree.Panel横向不出滚动条,纵向滚动条失效的问题

Extjs中如何动态加载'Ext.tree.Panel'树当中的各个节点

Extjs4 树面板从网格面板借用

EXTJS 本地化(覆盖类)

ExtJS4 树形面板问题