我在搜索栏中使用此过滤功能。但它似乎没有起作用。
我遇到的错误是
描述资源路径位置类型 1061:通过静态类型spark.components:List的引用调用可能未定义的方法刷新。 Malls.mxml / SGshopping / src / views第15行Flex问题
和
描述资源路径位置类型 1119:通过带有静态类型spark.components:List的引用访问可能未定义的属性filterFunction。 Malls.mxml / SGshopping / src / views第14行Flex问题
对不起伙计们。我仍在学习。这真的很令人困惑,我在哪里做错了?
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" title="Malls"
creationComplete="malls.send()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="malls" url="assets/employees.xml"
result="data=malls.lastResult.list.employee"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
private function filterDemo():void{
list.filterFunction=searchDemo; - I am having errors here
list.refresh(); - and here
}
private function searchDemo(item:Object):Boolean{
var isMatch:Boolean=false;
if(item.name.toLowerCase().search(search.text.toLowerCase())!=-1){
isMatch=true;
}
return isMatch;
}
]]>
</fx:Script>
<s:navigationContent/>
<s:titleContent>
<s:TextInput id="search" change="filterDemo()" x="10" y="10" prompt="Search"/>
</s:titleContent>
<s:List id="list" top="0" bottom="0" left="0" right="0"
dataProvider="{data}"
change="navigator.pushView(MallsDetails, list.selectedItem)">
<s:itemRenderer>
<fx:Component>
<s:IconItemRenderer
label="{data.firstName} {data.lastName}"
messageField="title"/>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:View>
答案 0 :(得分:0)
错误类型1061和类型1119以上两个错误清除显示列表控件中没有filterFunction属性和刷新方法它属于ListCollectionView
类所以你的情况尝试将employee.xml转换为XMLListCollection。
声明数据变量的位置?通常在itemRenderer中我们可以访问itemRenderer之外的数据get和setter,我们无法访问。
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" title="Malls"
creationComplete="malls.send()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:HTTPService id="malls" url="assets/employees.xml"
result="malls_resultHandler(event)"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
[Bindable]
private var employeeList:XMLListCollection; //instead data
private function malls_resultHandler(event:ResultEvent):void
{
employeeList = new XMLListCollection(new XMLList(malls.lastResult.mallD));
}
private function filterDemo():void{
employeeList.filterFunction=searchDemo; //Here employeeList instead of list control
employeeList.refresh(); //List control doesn't have filterFunction and refresh function.
}
private function searchDemo(item:Object):Boolean{
var isMatch:Boolean=false;
if(item.name.toLowerCase().search(search.text.toLowerCase())!=-1){
isMatch=true;
}
return isMatch;
}
]]>
</fx:Script>
<s:navigationContent/>
<s:titleContent>
<s:TextInput id="search" change="filterDemo()" x="10" y="10" prompt="Search"/>
</s:titleContent>
<s:List id="list" top="0" bottom="0" left="0" right="0"
dataProvider="{employeeList}"
change="navigator.pushView(MallsDetails, list.selectedItem)">
<s:itemRenderer>
<fx:Component>
<s:IconItemRenderer
label="{data.firstName} {data.lastName}"
messageField="title"/>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:View>
基于您的XML Struture:
var response:XML = malls.lastResult as XML;
var mallIDXMLList:XMLList = response.mallD;
employeeList = new XMLListCollection(mallIDXMLList);