Flex 4从spark DropDownList中删除所选项目

时间:2011-06-30 21:45:56

标签: flex actionscript-3 flex4 flash-builder mxml

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

关于这是否可能的任何想法,如果是这样,如何实现它真的很感激。

提前致谢。

将Flash Builder 4与Flex 4.0 sdk一起使用

2 个答案:

答案 0 :(得分:0)

只要您的下拉列表使用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>

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

答案 1 :(得分:0)

无需自定义皮肤。只需为dropdownList和父级的更改事件创建一个新的ItemRenderer,如果visible,则将includeInLayoutparent.selectedItem = data设置为false。为了避免创建全新的itemrenderer,您可能只需要扩展spark的“defaultItemRenderer”类。如果您使用MXML itemrenderer,只需设置visible="{data != (parent as DropDownList).selectedItem}",它就应该绑定。如果没有,也可以在活动中进行。