Flex 4 从火花 DropDownList 中删除所选项目

Posted

技术标签:

【中文标题】Flex 4 从火花 DropDownList 中删除所选项目【英文标题】:Flex 4 remove selected item from spark DropDownList 【发布时间】:2011-09-26 08:30:49 【问题描述】:

我的利益相关者请求从应用程序的 DropDownList 控件中删除当前选定的项目。例如带有 [item1, item2, item3, item4] 的下拉菜单,如果选中 item2,则下拉菜单中的唯一项目将是 [item1, item3, item4]

任何关于这是否可能以及如何实施的想法将不胜感激。

提前致谢。

将 Flash Builder 4 与 Flex 4.0 sdk 结合使用

【问题讨论】:

【参考方案1】:

只要你的下拉列表使用 ArrayCollection 作为数据提供者,你就可以指定过滤函数来移除当前选中的条目:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="onCreationComplete()">
    <fx:Script>
        <![CDATA[

            [Bindable] private var _yourAC:ArrayCollection = new ArrayCollection(['item 1', 'item 2', 'item 3']);

            private function onCreationComplete():void
            
                _yourAC.filterFunction = filter;
            

            private function filter(item:Object):Boolean
            
                return item != list.selectedItem;
            

        ]]>
    </fx:Script>
    <s:DropDownList id="list" dataProvider="this._yourAC" change="this._yourAC.refresh();" />
</s:Application>

我认为这应该过滤掉您选择的项目:)

【讨论】:

这样的副作用是 DropDownList 将恢复为未选中状态;因为 selectedItem" 不再在 dataProvider 中。我从原始帖子中不清楚这是否是可接受的副作用。 好的,所以确实从列表中删除了所选项目,但它也更改了视图以显示列表中的下一个项目,因为它实际上位于所选项目的索引处。 IE:选择 item3 下拉列表的标题将 item4 显示为当前选定的项目。所以正如前面的评论者指出的那样,这是不可接受的功能:( 啊,对,没想到。您可以轻松地扩展组件以具有这种功能,因为默认情况下它没有。我会四处寻找,因为我很确定过去有人做过类似的事情。【参考方案2】:

无需自定义皮肤。只需为您的下拉列表创建一个新的 ItemRenderer,并在父级的更改事件上,将 visibleincludeInLayout 设置为 false,如果 parent.selectedItem = data。为避免创建全新的 itemrenderer,您可能只扩展 spark 的“defaultItemRenderer”类。如果您使用 MXML itemrenderer,只需设置visible="data != (parent as DropDownList).selectedItem",它应该绑定。如果没有,请在活动中也这样做。

【讨论】:

好的,所以效果不太好。它似乎没有约束力,也没有为此工作。一个问题是项目渲染器的直接父级不是下拉列表。我尝试添加一个事件侦听器,在父项渲染器的 creationComplete 事件上设置更改事件,但当时尚未将其添加到父项,我尝试了 add、added 和 addedToStage 事件,但他们从不开火。

以上是关于Flex 4 从火花 DropDownList 中删除所选项目的主要内容,如果未能解决你的问题,请参考以下文章

jQuery结合flex能够碰撞出什么样的火花呢?

过滤器是不是会破坏 Flex 4.5 皮肤中的 colorizeExclusions,如果是,是不是有解决方法?

Flex 4.5:带有自定义 ItemRenderes 的 Spark DataGrid

火花一般按钮皮肤

从 View 中读取 Control DropDownList

如何从 DropDownList 中查找值