我在使用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中的重复节点;正确地展开/折叠。
答案 0 :(得分:3)
我已经找到了解决办法,而sencha“修复了”这个问题......
以下是我刚刚决定在每个商店中添加的解决方法,因此不会再出现这种情况:
...
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解决了我的问题。
这个对我有用。