我有一个包含员工详细信息的XML文件。我必须使用过滤器。在这里,我想使用两个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无效。如果有人能找到我的错误?
答案 0 :(得分:0)
这是你的代码中的拼写错误还是堆栈溢出问题没有显示一些字符(我假设的OR管道)?
employeeName.text.length == 0 endYear.value == 0 &&
employeeID.text.length == 0
更新:即使使用管道,此测试也没有意义。
答案 1 :(得分: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;
我确信在您重构代码之后,只需简单明了就可以轻松修复任何错误