EXTjs 5树节点双重加载

时间:2014-08-01 16:06:05

标签: extjs treeview extjs5

我在使用ext5树时遇到了很多麻烦,所以我想我会在这里发帖,看看你们注意到了什么,希望能帮助你解决这些5.0.0错误... < / p>

如果将TreeStore设置为

,则TreeStore似乎加载两次
autoload:true

。因此,它以某种方式复制了treepanel中显示的节点,导致各种问题/错误......

因此,在创建变通方法时,我将TreeStore设置为

autoload:false

并尝试在呈现视图后抓取商店并加载它。 [失败]。 TreeStore只加载一次,但树实际上无法渲染。同样,除了将存储设置为不自动加载并将其放入控制器之外,没有任何更改:

var s = Ext.getStore('myStore');
s.load();

没有树会被涂上......

所以,解决方法二(AWFUL解决方案) - 让商店自动加载(使用两个代理调用),但在树呈现后,删除所有数据,然后再次手动加载存储。

(in the store)
...
autoload: true
...

(in the controller)
...
var s = Ext.getStore('myStore');
s.removeAll();
s.load();
...

快变!树在最后时间加载,只有数据表示一次!没有重复!!

然而,现在所有的扩张和崩溃都被打破了。没有事件被触发,节点的扩展和折叠都不起作用....也许崩溃/扩展已经被破坏了?

设置自动加载:true,取出控制器代码。

TreeStore加载两次; treepanel中的重复节点;正确地展开/折叠。

3 个答案:

答案 0 :(得分:3)

我已经找到了解决办法,而sencha“修复了”这个问题......

My Sencha Bug Report

以下是我刚刚决定在每个商店中添加的解决方法,因此不会再出现这种情况:

...
listeners: {        
     beforeload: function (store, operation, eOpts) {            
          if(store.isLoading()) return false;        
     }    
}
...

通过添加此功能,任何商店都不会“加载”。我们必须把这种类型的解决办法放在......中,这太荒谬了。

祝你好运!

答案 1 :(得分:2)

这不是商店,而是与树小组的互动。如果没有加载或加载商店,TreePanel有一些令人讨厌的问题。 Sencha论坛上有很多关于它的错误。

我使用的解决方法是创建存储,加载它,然后在加载返回之前将其插入TreePanel。

如果在将其插入TreeStore后调用load,则根节点不正确,并且商店无法呈现。

通过beforeload事件阻止负载发生将阻止您对树存储进行部分加载,您可以随时扩展每个节点。

答案 2 :(得分:0)

var MenuStore = new Ext.data.TreeStore({
    storeId: 'MenuStore',
    model: 'BaseMenu',
    autoLoad: false,
    proxy: {
          type: 'ajax',
          url: '/menu.json'
    },
    root: {
        text: 'Menu',
        id: 'src',
        expanded: true,
        loaded:true
    }
});

设置已加载:true解决了我的问题。

这个对我有用。