2011-06-30 84 views
2

我的利益相關者有一個請求,從應用程序中的DropDownList控件中刪除當前選定的項目。例如,如果選擇item2,則下拉選項[item1,item2,item3,item4],那麼下拉菜單中的唯一項目將是[item1,item3,item4]Flex 4從火花中刪除選定的項目DropDownList

任何有關這是否可能的想法,如果有的話如何實現它真的很感激。

在此先感謝。

使用Flash Builder 4使用Flex 4.0 SDK

回答

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> 

我認爲這應該篩選出您選擇的項目:)

+0

類似這樣的副作用是DropDownList將恢復爲未選定狀態;因爲selectedItem「不再在dataProvider中,如果這是一個可接受的副作用,我不清楚原始帖子。 – JeffryHouser

+0

確定,以便從列表中刪除選定的項目,但它也將視圖更改爲顯示列表中的下一個項目,因爲它實際上位於所選項目的索引處:IE:選擇項目3下拉列表的標題顯示項目4作爲當前選擇的項目,因此正如前面的評論者指出的那樣,這是不可接受的功能: ( – HJ05

+0

啊,沒有想到這一點,你可以很容易地擴展組件,使其具有這種功能,因爲默認情況下,它不會,我會搜索周圍,因爲我確信有人做了類似的事情過去 –

0

無需自定義蒙皮。只需爲您的dropdownList和父級的更改事件創建一個新的ItemRenderer,如果parent.selectedItem = data設置爲visibleincludeInLayout爲false。爲了避免創建一個全新的itemrenderer,你可能只需要擴展spark的「defaultItemRenderer」類。如果您使用MXML itemrenderer,只需設置visible="{data != (parent as DropDownList).selectedItem}",它應該綁定。如果沒有,請在事件中進行。

+0

好吧,這樣工作不太好,它似乎並沒有綁定,或者曾經爲此工作過,其中一個問題是,項目渲染器的直接父項不是下拉列表。嘗試添加一個事件李stener,在父項上,在項目渲染器的creationComplete事件上設置更改事件,但在此時尚未將其添加到父項,我嘗試了添加,添加和添加的ToStage事件,但它們從未激發。 – HJ05

相關問題