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);
}
以下提到在beforeLoad中判断,如果store.isLoading()则返回false(阻止加载)。
这个在某些场合会有问题,首次加载由node#expand触发的,如果我们初始化此界面加入了一些过滤条件,需要再refresh(load)数据,就被阻止了。
http://www.sencha.com/forum/showthread.php?260052
http://www.sencha.com/forum/showthread.php?287930