javascript - EXTJS setRootNode 可能存在的错误

标签 javascript extjs tree extjs4.2

我有一个树面板和树商店,我想将我的树面板保存到商店中,因为我正在使用:

var treepanel = Ext.create('Ext.tree.Panel', {
         title: 'Tree example',
         store: store,
         rootVisible: false,
         lines: true
});

var store = Ext.create('Ext.data.TreeStore', {
    root: {
        expanded: true,
    }
});

var button = Ext.create('Ext.button.Button', {
    text: 'test',
    handler: function() {
         treepanel.getRootNode().appendChild({text: 'child',
                                              leaf: true});
         store.setRootNode(treepanel.getRootNode());
    }
});

但这不起作用,但是如果我创建一个像这样的变量:

var aux = { root:{ 
                  expanded: true,
                  children: [{
                            text: 'child',
                            leaf: true
                           }]
           }}

我以同样的方式使用:

store.setRootNode(aux);

这很好用。有什么想法吗?这是 fiddle 示例,您可以使用按钮 1 和 2 并使用 firebug 检查错误:http://jsfiddle.net/fL5fT/28/

最佳答案

我认为你确实误解了你在 fiddle 中写的一些操作:

首先是这段代码:

treepanel.getRootNode().appendChild({text: 'child', leaf: true});

已将商品/子商品保存到该商店。所以你不需要这样做:

store.setRootNode(treepanel.getRootNode());

上一行中的下一个困惑是您正在尝试设置store的新RootNode。这种情况会在控制台中抛出错误,因为您试图设置语法错误的 RootNode

这段代码可以工作:

var aux = { root:{ 
                  expanded: true,
                  children: [{
                            text: 'child',
                            leaf: true
                           }]
           }}

因为您已在此处创建了正确的新RootNode

您需要注意,创建新的 RootNode 会丢弃之前添加到该存储的所有项目。

关于javascript - EXTJS setRootNode 可能存在的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129506/

相关文章:

java - 在java中遍历非二叉树

javascript - 遍历json抽象语法树构建 boolean 表达式

javascript - 如何动态更改 Intersection Observer 的配置

javascript - 为什么 jCanvas 绘制错误的像素?

javascript - 如何在 Extjs 4 网格 groupHeader 中显示分组值?

javascript - Ext.dispatch 来自 itemTap 监听器?

sencha-touch - Sencha Touch itemtap

java - 如何在 Java 中为 Tree 正确实现 equals(), hashCode()?

javascript - 导航栏中的内容是否可以充当按钮而不是链接

javascript - Appcelerator 4.1.2 Titanium SDK 4.1.0GA - 我的 Helloworld 无法在 Android 模拟器上运行