[英]Flex 4 - How to use filter for NumericStepper?
我有一个XML文件,其中包含Employee详细信息。 而且我必须在上面使用过滤器。 在这里,我想使用两个NumericStepper来过滤体验。 如果我为第一个和第二个NumericStepper选择1和4,DataGrid将显示该雇员的清单,该清单是该雇员在1-4之间经历的。
这是我的代码:
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.utils.ObjectUtil;
private function xmlListCollectionFilterFun(item : Object) : Boolean
{
if(employeeName.text.length !=0)
{
if((item.Name).toLowerCase().indexOf(employeeName.text.toLowerCase())!= -1)
{
return true;
}
}
if(employeeID.text.length != 0)
{
if((item.Id).toLowerCase().indexOf(employeeID.text.toLowerCase()) != -1)
{
return true;
}
}
if(endYear.value != 0)
{
if((startYear.value)<=(item.Experience)<=(endYear.value))
{
return true;
}
}
return false;
}
protected function employeeText_changeHandler():void
{
if( employeeName.text.length == 0 && endYear.value == 0 &&
employeeID.text.length == 0 )
{
employeeXMLList.filterFunction = null;
}
else
{
employeeXMLList.filterFunction = xmlListCollectionFilterFun;
}
employeeXMLList.refresh();
}
]]>
</fx:Script>
<fx:Declarations>
<fx:XML id="tempXML"
source="skins/TextXmlFile.xml" />
<s:XMLListCollection id="employeeXMLList"
source="{tempXML.Employee}" filterFunction="xmlListCollectionFilterFun"/>
</fx:Declarations>
<s:layout>
<s:VerticalLayout verticalAlign="top" horizontalAlign="center" paddingTop="30"/>
</s:layout>
<mx:VBox width="100%">
<s:HGroup width="100%">
<s:TextInput id="employeeName" change="employeeText_changeHandler()" prompt="Employee Name"/>
<s:TextInput id="employeeID" prompt="Employee ID" change="employeeText_changeHandler()"/>
<s:NumericStepper id="startYear" minimum="0" maximum="50" snapInterval="1" />
<s:NumericStepper id="endYear" minimum="0" maximum="50" snapInterval="1" change="employeeText_changeHandler()"/>
</s:HGroup>
<s:DataGrid id="dataGrid" dataProvider="{employeeXMLList}" width="100%" height="100%">
<s:columns>
<s:ArrayCollection>
<s:GridColumn id="nameCol" dataField="Name" headerText="Name:"/>
<s:GridColumn id="idCol" dataField="Id" headerText="ID:"/>
<s:GridColumn id="experienceCol" dataField="Experience" headerText="Experience:"/>
</s:ArrayCollection>
</s:columns>
</s:DataGrid>
这对NumericStepper无效。 如果有人能找到我的错误?
是您的代码中有错字,还是堆栈溢出问题,其中没有显示一些字符(我假设是OR管道)?
employeeName.text.length == 0 endYear.value == 0 &&
employeeID.text.length == 0
更新:即使使用管道,此测试也没有意义。
尝试始终将您的代码拆分为只做一件事情的小函数,我会这样做:
getUserExperience(user:Object):Number
实现此功能首先进行一些测试,获得测试结果后返回正确的体验,然后可以继续进行过滤功能。
编写一些代码以计算过滤器的最小和最大体验
var min:Number=startYear.value;
var max:Number=endYear.value;//if needed adjust this to seome default values
现在,过滤应该很容易,因为您只有数字而没有UI组件和对象,因此过滤器将需要检查一件简单的事情
var userExp:Number=getUserExperience(user);
var response:Boolean=mio<=userExp&&userExp<=max;
return response;
我敢肯定,在将代码重构为简单明了之后,很容易修复所有错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.