Flex中ArrayCollection的filterFunction过滤

不得不提的是:遇到一个新的事物,博主并不能很理性的对待,会有一段时间的慌乱,不知所措;需要不少的时间是接受,理解;

上面的情况直接导致博主在初次使用filterFunction这个方法做过滤的时候,遇到了问题本身之外的事物干扰、影响,带来了许多困扰和阻扰;

  1. 误以为是一种递归的方法;
在第一次接触到这个方法的时候,首先接受的到的东西是***过滤***,***一种递归过滤***、***算的上一种递归***之类的信息。然后潜意识以为这是一种

递归的过滤;

然后我很就掉进这个大坑里面了。爬了好久.....

  • 注意:这个方法只是一层循环,和for是相同的效果。不同的是可以把条件写在被调用的函数中;注意:只是一层循环;
  • 下面贴上一个实例代码,有助于见识filterFunction的真面目:
if(scadaTreeAC)//Tree的数据源,ArrayCollection数组
{
	scadaTreeAC.filterFunction = changeDataSource;
	scadaTreeAC.refresh();
	if(scadaTreeAC && scadaTreeAC.length>0){
		scadaTree.dataProvider =scadaTreeAC;
	}else{
		scadaTree.dataProvider=new ArrayCollection();
	}
}

private function changeDataSource(item:Object):Boolean
{
	var bool:Boolean=false;
	if(item.hasOwnProperty("children"))
	{
		var tempAC:ArrayCollection = item.children as ArrayCollection;
		if(tempAC)
		{
			tempAC.filterFunction = stationFilter;
			tempAC.refresh();
			if(tempAC.length>0)
				bool=true; 
		}
	} 
	return bool;
}

private function stationFilter(item:Object):Boolean
{
	var bool:Boolean=true;
	if(boxArea.selectedItem.TAGNAME=="全部"||(String(boxArea.selectedItem.TAGNAME).indexOf(item.ZBNAME)>-1))
	{
		if(item.hasOwnProperty("children"))
		{
			var tempAC:ArrayCollection = item.children as ArrayCollection;
			tempAC.filterFunction = allFilter;
			tempAC.refresh();
		}
		else
			bool = true;
	}else 
		bool=false;
	return bool;
}

private function allFilter(item:Object):Boolean
{
	var bool:Boolean = false;
	var tempStr:String = item.ZONE_S;
	if(stationBoxArea.selectedItem.StationName=="全部"||(String(stationBoxArea.selectedItem.StationName).indexOf(tempStr)>-1))
	{
		bool = true;
	}else 
		bool=false;
	return bool;
}

这是一个稍微复杂点的过虑,只要思路清晰,其实过虑都是一样的操作;

  • 唯一需要注意的是,如果要基于上一次过虑的结果上在做一层过虑,就要在条件判断为true的那部分结果中进一步过虑;
  • 其它的就不解释了,有疑问的留言吧~




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值