簡體   English   中英

Flex:有沒有辦法將ComboBox的selectedItem綁定到變量?

[英]Flex: Is there a way to bind ComboBox's selectedItem to a variable?

好的,我有一個ComboBox,dataProvider是具有標簽屬性的對象數組,這些標簽屬性為ComboBox提供了選項列表。

有沒有一種方法可以讓我擁有mySelectedItem之類的變量,並將ComboBox的selectedItem綁定到該變量,以便如果它發生更改,ComboBox的selectedItem也將更改為它的任何值?

我希望這是有道理的。

謝謝!

是的,ComboBox的selectedItem屬性是可綁定的。

它會像這樣:

<mx:ComboBox selectedItem="{mySelectedItem}">
</mx:ComboBox>

在您的AS中:

[Bindable]
var mySelectedItem:Object;

對mySelectedItem的更改應顯示在ComboBox中。 如果ComboBox的dataProvider中不存在mySelectedItem引用的項目,則可能會出錯。

從表面上看,它很簡單:

<mx:ComboBox id="myComboBox"
   dataProvider="{myDataProvider}"
   selectedItem="{defaultItem}"/> 

當將defaultItem(確保它是[Bindable])設置為數據提供程序中的一項時,它將更新控件。

但是這種方法存在問題。 除非currentDefaultItem在myDataProvider之后始終更改,否則與dataProvider的綁定可能會撤消選擇,並恢復為默認值(列表中的第一項)。

解決此問題的一種方法是通過將dataProvider包含在提供selectedItem的調用中,強制將selectedItem反彈到dataProvider之后。

<mx:ComboBox id="myComboBox"
   dataProvider="{myDataProvider}"
   selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/>

這是為了確保當currentDefaultItem更改時或dataProvider更改后,selectedItem將被反彈。 我自己會對其他解決方案感興趣。

將事件偵聽器用於Change事件並在那里進行處理。

// update a label item's text with that of the Combobox's selectedItem
private function changeEvt(event:Event):void {
    label.text =event.currentTarget.selectedItem.label + " " + 
}

或者,如果您不介意擴展ComboBox,則可以執行以下操作: 這是偽代碼(對不起,匹配的標識取決於對象類型)-但您會明白...

public class IndexRetainingComboBox extends ComboBox 
{
    public function IndexRetainingComboBox()
    {
        super();
    }

    override public function set dataProvider(value:Object):void
    {
        var originalSelection:Object = this.selectedItem;
        super.dataProvider = value;
        var newIdx:uint = [find originalSelection idx in combobox or return 0 ]
        this.selectedIndex = newIdx;
    }
}

我知道這是文檔中描述的方式。 就像對selectedItem的更改一樣,它將觸發更改偵聽器。 但是對我來說,這不會發生。 還有其他人遇到相同的行為嗎?

這看起來很不錯:將value屬性設置為可寫: http : //flex.sys-con.com/node/312098

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM