【ExtJS】修复tree重复加载Bug

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值