您的位置:首页 > Web前端 > JavaScript

【ExtJS】修复tree重复加载Bug

2015-01-15 00:47 471 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: