treepanel,不管autoLoad什么值,都会先加载。
若再设置autoLoad为true,则再加载一遍。
属bug,官方v4版本有人提,v5中仍未解决。
解决方法:设置autoLoad为false,增加beforeload阻止由expand触发的load,自己调用load,可放在panel#afterRender中触发。
//viewModel stores stores : { dataList : { model : 'My.model.UserModel', remoteFilter : true, autoLoad : false, autoFilter : false, type : 'tree', nodeParam : 'id', root : { expanded : true }, listeners : { beforeload : function(store, operation, opts) { //阻止加载 if(!store._can_load_){ return false; } return true; } } } } var cfg={...}; if (store.type == 'tree') { /** * 【fix extjs bug】 * 结合viewModel.dataList.listeners.beforeload方法,防止tree重复加载。 */ if (store.root && !store._can_load_) { // 第一次,执行expand,触发load。 store._can_load_ = true; store.root.expand(true); } else { store._can_load_ = true; store.load(cfg); } } else { store.load(cfg); }
这个在某些场合会有问题,首次加载由node#expand触发的,如果我们初始化此界面加入了一些过滤条件,需要再refresh(load)数据,就被阻止了。
http://www.sencha.com/forum/showthread.php?260052
http://www.sencha.com/forum/showthread.php?287930