我的利益相關者有一個請求,從應用程序中的DropDownList控件中刪除當前選定的項目。例如,如果選擇item2,則下拉選項[item1,item2,item3,item4],那麼下拉菜單中的唯一項目將是[item1,item3,item4]Flex 4從火花中刪除選定的項目DropDownList
任何有關這是否可能的想法,如果有的話如何實現它真的很感激。
在此先感謝。
使用Flash Builder 4使用Flex 4.0 SDK
我的利益相關者有一個請求,從應用程序中的DropDownList控件中刪除當前選定的項目。例如,如果選擇item2,則下拉選項[item1,item2,item3,item4],那麼下拉菜單中的唯一項目將是[item1,item3,item4]Flex 4從火花中刪除選定的項目DropDownList
任何有關這是否可能的想法,如果有的話如何實現它真的很感激。
在此先感謝。
使用Flash Builder 4使用Flex 4.0 SDK
只要你的下拉列表中使用的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和父級的更改事件創建一個新的ItemRenderer,如果parent.selectedItem = data
設置爲visible
和includeInLayout
爲false。爲了避免創建一個全新的itemrenderer,你可能只需要擴展spark的「defaultItemRenderer」類。如果您使用MXML itemrenderer,只需設置visible="{data != (parent as DropDownList).selectedItem}"
,它應該綁定。如果沒有,請在事件中進行。
好吧,這樣工作不太好,它似乎並沒有綁定,或者曾經爲此工作過,其中一個問題是,項目渲染器的直接父項不是下拉列表。嘗試添加一個事件李stener,在父項上,在項目渲染器的creationComplete事件上設置更改事件,但在此時尚未將其添加到父項,我嘗試了添加,添加和添加的ToStage事件,但它們從未激發。 – HJ05
類似這樣的副作用是DropDownList將恢復爲未選定狀態;因爲selectedItem「不再在dataProvider中,如果這是一個可接受的副作用,我不清楚原始帖子。 – JeffryHouser
確定,以便從列表中刪除選定的項目,但它也將視圖更改爲顯示列表中的下一個項目,因爲它實際上位於所選項目的索引處:IE:選擇項目3下拉列表的標題顯示項目4作爲當前選擇的項目,因此正如前面的評論者指出的那樣,這是不可接受的功能: ( – HJ05
啊,沒有想到這一點,你可以很容易地擴展組件,使其具有這種功能,因爲默認情況下,它不會,我會搜索周圍,因爲我確信有人做了類似的事情過去 –