Actionscript 3过滤组合框中的项目

时间:2017-03-01 20:52:11

标签: actionscript-3 combobox mxml

所以我有一个组合框应该按如下方式工作:

  1. 点击下拉列表
  2. 选择项目
  3. 项目已移至另一个列表
  4. 第一个组合框下拉列表中无法再找到项目
  5. 所以我创建了一个类似的组合框:

        <s:ComboBox
                id="cbox"
                labelFunction="labels"
                dataProvider="{objects}"
                change="addFilter()"
                restrict="a-zA-Z0-9\-,_"
                width="100%"
                maxChars="32"
                prompt="add filter"
        />
    

    我的问题源于调用objects.refresh(),因为list.as文件(AS库)在行dataGroup.removeEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteListenerA);处失败,dataGroup为空。

    objects ArrayCollection上的我的过滤功能类似于:

    private function filterEcus(item:Object):Boolean {
         for each (var i:Object in secondList) {
            if (i.property == item.property) {
                return true;
            } else {
                return false;
            }
        }
        //should not reach this
        return true;
    }
    

    我在更改处理程序的末尾调用了刷新。

1 个答案:

答案 0 :(得分:0)

您的问题有一个更简单的解决方案。我刚试过它。 首先,您需要声明组合框:

<s:ComboBox id="primaryCombobox" change="updateList(event)">
    <s:ArrayList>
        <fx:Object label="One"/>
        <fx:Object label="Two"/>
        <fx:Object label="Three"/>
        <fx:Object label="Four"/>
    </s:ArrayList>
</s:ComboBox>

<s:ComboBox id="secondaryCombobox">
    <s:ArrayList>
        <!-- You need to declare an empty data provider. -->
    </s:ArrayList>
</s:ComboBox>

然后在更改处理程序上使用此函数:

private function updateList(event:IndexChangeEvent):void
{
    secondaryCombobox.dataProvider.addItem(primaryCombobox.selectedItem);
    primaryCombobox.dataProvider.removeItemAt(primaryCombobox.selectedIndex);
}