【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


你可能感兴趣的:(【ExtJS】修复tree重复加载Bug)