繁体   English   中英

Flex 4-如何为NumericStepper使用过滤器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM