首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个实例时包含filterFunction问题的自定义组件

使用多个实例时包含filterFunction问题的自定义组件
EN

Stack Overflow用户
提问于 2011-04-05 20:38:17
回答 2查看 454关注 0票数 0

我有一个主应用程序,它使用自定义MXML组件的两个实例。

我在自定义组件中包含了所有逻辑和查询,以查询MySQL并用结果填充ArrayCollection。

在我的第一个DropDownList中,我想显示数据库中所有可用的货币。

在第二个DropDownList中,我只想使用filterFunction显示CAD和美元货币。

我不知道为什么,但是一旦filterFunction应用到第一个元素,第二个动作就像他们共享相同的currenciesList变量(这是我的问题)。

Bindable for currenciesList需要绑定到my aSyncListView。

要在主应用程序中使用公共 for currenciesList是必需的。

不管我的变量是公共的还是私有的,我都有同样的错误.请查看此邮件末尾的输出。

在我的主要应用程序中的调用看起来像:

代码语言:javascript
复制
<mx:Form>
  <formElems:DropDownListCurrencies id="product_cost_price_curr"
    currencyCadUsdOnly="true"/>
  <formElems:DropDownListCurrencies id="product_price_curr"/>
</mx:Form>

现在是我的自定义组件:

代码语言:javascript
复制
<fx:Script>
    <![CDATA[
        import classes.SharedFunctions;

        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
        import mx.events.FlexEvent;
        import mx.rpc.events.ResultEvent;

        [Bindable]
        public var currenciesList:ArrayCollection;

        public var currencyCadUsdOnly:Boolean = false;

        protected function dropdownlist1_creationCompleteHandler(event:FlexEvent):void
        {
            getAllCurrenciesResult.token = currenciesService.getAllCurrencies();

            // DEBUG just to show the id of the component
            trace('id:' + this.id + ' (getAllCurrencies)');
        }

        protected function getAllCurrenciesResult_resultHandler(event:ResultEvent):void
        {
            currenciesList = getAllCurrenciesResult.lastResult;

            // DEBUG before filterFunction
            trace('id:' + this.id + ', currencyCadUsdOnly:' + currencyCadUsdOnly + ', currenciesList.length:' + currenciesList.length + ' (BEFORE filterFunction)');

            if (currencyCadUsdOnly == true) {
                currenciesList.filterFunction = filterCadUsdOnly;
                currenciesList.refresh();
            }

            // DEBUG after filterFunction
            trace('id:' + this.id + ', currencyCadUsdOnly:' + currencyCadUsdOnly + ', currenciesList.length:' + currenciesList.length + ' (AFTER filterFunction)');
        }

        protected function filterCadUsdOnly(obj:Object):Boolean
        {
            return (obj.code == 'CAD' || obj.code == 'USD');
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <s:CallResponder id="getAllCurrenciesResult" result="getAllCurrenciesResult_resultHandler(event)"/>
    <currenciesservice:CurrenciesService id="currenciesService" fault="SharedFunctions.showError(event.fault.faultString, event.fault.faultDetail)" showBusyCursor="true"/>
</fx:Declarations>

<s:AsyncListView list="{currenciesList}"/>

最后,让我们看看控制台输出。我期望在创建第二个组件时ArrayList的长度为7.:

代码语言:javascript
复制
id:product_prices_curr (getAllCurrencies)
id:product_cost_price_curr (getAllCurrencies)
id:product_prices_curr, currencyCadUsdOnly:true, currenciesList.length:7 (BEFORE filterFunction)
id:product_prices_curr, currencyCadUsdOnly:true, currenciesList.length:2 (AFTER filterFunction)
id:product_cost_price_curr, currencyCadUsdOnly:false, currenciesList.length:2 (BEFORE filterFunction)
id:product_cost_price_curr, currencyCadUsdOnly:false, currenciesList.length:2 (AFTER filterFunction)

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-06 01:08:41

当您需要在具有不同过滤器的多个地方拥有相同的列表时,您需要的是一个ListCollectionView。这样,您就可以对其应用一个筛选器,而不会影响原始列表。它就像:

代码语言:javascript
复制
var secondList:ListCollectionView = new ListCollectionView(originalList);

您的secondList可以在不影响原始列表的情况下使用您喜欢的任何筛选器,在添加或从originalList中删除项时,还可以进行更新。

见此处:mx.collections.ListCollectionView

票数 1
EN

Stack Overflow用户

发布于 2011-04-05 23:34:04

尝试将代码更改为以下内容:

代码语言:javascript
复制
        if (currencyCadUsdOnly == true) {
            currenciesList = new ArrayCollection(currenciesList.source);
            currenciesList.filterFunction = filterCadUsdOnly;
            currenciesList.refresh();
        }

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5558213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档