【问题标题】:Flex 4 - Filter is not workingFlex 4 - 过滤器不工作
【发布时间】:2014-02-27 08:55:37
【问题描述】:

我正在 Spark DataGrid 中进行过滤。但我无法过滤数据。我使用 dataprovider 作为 XML 文件。我的代码在这里

<s:Application 
xmlns:fx="http://ns.adobe.com/mxml/2009"    
xmlns:mx="library://ns.adobe.com/flex/mx"     
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        private function xmlListCollectionFilterFun(item : Object) : Boolean
        {
            var token : String = employeeName.text.toLowerCase();
            var eName : String = employeeXMLList.child("Name");
            var col : XMLList=tempXML.Employee.Name;
            if(eName.toLowerCase().indexOf(token)!= -1)
            {
                return true;
            }
            return false;
        }


        protected function employeeName_changeHandler():void
        {
            if( employeeName.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>

<mx:VBox width="80%">

    <s:TextInput id="employeeName" change="employeeName_changeHandler()"/>
    <s:DataGrid id="dataGrid" dataProvider="{employeeXMLList}" width="100%" >
        <s:columns>
            <s:ArrayCollection>
                <s:GridColumn id="nameCol" dataField="Name" headerText="Name:" />
                <s:GridColumn id="idCol" dataField="Id" headerText="ID:"/>
                <s:GridColumn id="mobileCol" dataField="Mobile" headerText="Mobile:"/>
                <s:GridColumn id="alterCol" dataField="AlterMobile" headerText="Alternative Number"/>
            </s:ArrayCollection>
        </s:columns>
    </s:DataGrid>
</mx:VBox>
</s:Application>

我的 XML 文件是:

<?xml version="1.0" encoding="UTF-8"?>
<CompanyEmployees version="1">   

<Employee>
    <Name>John</Name>
    <Id>Em234</Id>
    <Mobile>09999999999</Mobile>
    <AlterMobile>yes</AlterMobile>>
</Employee>   

<Employee>
    <Name>Ram</Name>
    <Id>Em432</Id>
    <Mobile>8967452354</Mobile>
    <AlterMobile>yes</AlterMobile>
</Employee>   

<Employee>
    <Name>Raj</Name>
    <Id>Em098</Id>
    <Mobile>02343235478</Mobile>
    <AlterMobile>no</AlterMobile>
</Employee>   

显示没有错误。但我找不到我的错误在哪里,什么是错误?如果有人找到,请私信我。

谢谢

【问题讨论】:

  • 我不明白... 1. 你要过滤什么。 2. 为什么你从不在你的过滤函数中使用“item”参数。 3. 预期的结果是什么。只是一些代码没有帮助;O

标签: xml actionscript-3 apache-flex flex4


【解决方案1】:

您的过滤器功能会考虑整个数据而不是给定的单个项目。因此它可能总是返回所有项目,因为搜索的文本是由所有名称组成的。试试下面的代码:

private function xmlListCollectionFilterFun(item:Object):Boolean {
    var token:String = employeeName.text.toLowerCase();
    var eName:String = item.Name;
    if(eName.toLowerCase().indexOf(token)!= -1) {
        return true;
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 2012-08-01
    • 2023-03-21
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多