不得不提的是:遇到一个新的事物,博主并不能很理性的对待,会有一段时间的慌乱,不知所措;需要不少的时间是接受,理解;
上面的情况直接导致博主在初次使用filterFunction这个方法做过滤的时候,遇到了问题本身之外的事物干扰、影响,带来了许多困扰和阻扰;
- 误以为是一种递归的方法;
递归的过滤;
然后我很就掉进这个大坑里面了。爬了好久.....
- 注意:这个方法只是一层循环,和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的那部分结果中进一步过虑;
- 其它的就不解释了,有疑问的留言吧~