Flex实现树形列表的过滤
项目中用flex实现了一个设备列表,这个设备列表时树形结构的,当用户在输入关键字后,需要按照关键字过滤出符合条件的内容,用flex内部的过滤机制已经不能满足条件,需要自己重新写过滤方法,以下就是我写的过滤方法:
项目中用flex实现了一个设备列表,这个设备列表时树形结构的,当用户在输入关键字后,需要按照关键字过滤出符合条件的内容,用flex内部的过滤机制已经不能满足条件,需要自己重新写过滤方法,以下就是我写的过滤方法:
//keywodr 用户输入的关键字
public function filterData(keywodr:String):void
{
//templist是一个XMLList类型的全局变量,用于保存最原始的过滤内容
//unitGroupTree是从后台传入的信息,和树形控件绑定
templist = unitGroupTree.copy();
var xmllist:XMLList = templist;
if(keywodr !="")
{
this.keyword=keywodr;
var myxml:XML=<node/>;
for(var k:int=0;k < xmllist.length();k++)
{
var tempxml:XML=getXML(new XMLList(xmllist[k]));
if(tempxml.children().length() > 0){
myxml.appendChild(tempxml);
}
}
if(myxml.children().length() > 0){
myxml.node.node.@checked = "1";
unitGroupTreeTwo =XMLList(myxml);
unitGrouplist.dataProvider = unitGroupTreeTwo.children();
unitGrouplist.openItems = unitGroupTreeTwo..node;
}
else{
unitGrouplist.dataProvider = null;
}
}
else
{
unitGroupTree = templist.copy();
unitGrouplist.dataProvider = unitGroupTree;
unitGrouplist.openItems = unitGroupTree..node;
}
}
public function getXML(xmllist:XMLList):XML
{
var xmlChildren:XMLList=xmllist.children();
var xml:XML=<node/>;
if(xmllist.hasOwnProperty("@checked")) xml.@checked=xmllist.@checked;
if(xmllist.hasOwnProperty("@name")) xml.@name=xmllist.@name;
if(xmllist.hasOwnProperty("@oid")) xml.@oid=xmllist.@oid;
for(var i:int=0;i<xmlChildren.length();i++)
{
if(xmlChildren[i].children().length()>0)
{
var xmlGet:XML=getXML(new XMLList(xmlChildren[i]));
var tempStr:String=xmlGet.@name;
if((tempStr.toUpperCase().indexOf(this.keyword.toUpperCase())>=0)||xmlGet.children().length() > 0)
{
xml.appendChild(xmlGet);
}
}else
{
var temp:String=xmlChildren[i].@name;
if(temp.toUpperCase().indexOf(this.keyword.toUpperCase())>=0)
{
xml.appendChild(xmlChildren[i]);
}
}
}
return xml;
}