Actionscript 3 从组合框中过滤项目

Posted

技术标签:

【中文标题】Actionscript 3 从组合框中过滤项目【英文标题】:Actionscript 3 filter items out of combobox 【发布时间】:2017-07-21 09:00:54 【问题描述】:

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

    点击下拉菜单 选择一个项目 项目被移动到另一个列表中 项目无法再在第一个组合框下拉列表中找到

所以我创建了一个组合框,如下所示:

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

我的问题源于调用objects.refresh(),因为它在dataGroup.removeEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteListenerA); 行的list.as 文件(AS 库)中失败,其中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】:

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

<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);

【讨论】:

我有同样的问题,删除一个项目不会更新组合框,所以我必须调用.refresh(),随后失败。 尽量不要将 DataProvider 与 DataBinding 一起使用。这就是它对我有用的方式。您可以稍后在更改事件处理程序中模仿数据绑定。 myCombobox.dataProvider = someArrayList; 有趣,我真的很想知道为什么我的数据过滤器会导致问题。我删除了绑定,但刷新仍然失败。 使用我的代码,您实际上不需要调用 refresh(),因为所有更改都会立即应用。只需尝试将示例复制并粘贴到空白项目中即可查看交互。 对,但我的问题源于未应用更改,不得不调用刷新,然后它失败了。我在我的项目中尝试了您的解决方案,但它没有按预期工作。

以上是关于Actionscript 3 从组合框中过滤项目的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一个的选定项目过滤一个组合框集合?

从组合框中过滤查询(为 Null 且不为空)

如何从 R 数据框中过滤列的唯一组合

如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?

VBA 中的动态组合框项

从组合框中选择下一个项目,然后单击 Excel VBA 按钮