Flex: есть ли способ привязать selectedItem ComboBox к переменной? - PullRequest
7 голосов
/ 29 апреля 2009

ОК. У меня есть ComboBox, dataProvider - это массив объектов со свойствами меток, которые дают ComboBox список параметров.

Есть ли способ, которым я могу иметь переменную, подобную mySelectedItem, и привязать selectedItem ComboBox к нему, чтобы, если он изменится, selectedItem ComboBox изменится на то, чем он является?

Надеюсь, это имеет смысл.

Спасибо!

Ответы [ 6 ]

16 голосов
/ 29 апреля 2009

Да, свойство selectedItem в ComboBox можно привязать.

Это будет примерно так:

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

В вашей AS:

[Bindable]
var mySelectedItem:Object;

Изменения в mySelectedItem должны отображаться в ComboBox. Вы можете получить ошибки, если элемент, на который ссылается mySelectedItem, не существует в dataProvider ComboBox.

9 голосов
/ 29 апреля 2009

На первый взгляд, это просто:

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

Когда вы установите defaultItem (убедитесь, что он [Bindable]) для одного из элементов в поставщике данных, он обновит элемент управления.

Но есть проблемы с этим подходом. Если currentDefaultItem всегда не изменит ПОСЛЕ myDataProvider, привязка к dataProvider может отменить выбор, возвращаясь к значению по умолчанию (первый элемент в списке).

Одним из способов решения этой проблемы является принудительное восстановление выбранного элемента после dataProvider путем включения dataProvider в вызов, обеспечивающий выбранный элемент.

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

Это гарантирует, что selectedItem будет восстановлен при изменении currentDefaultItem или после изменения dataProvider. Я был бы заинтересован в других решениях сам.

2 голосов
/ 29 апреля 2009

Используйте прослушиватель событий для события 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 + " " + 
}
1 голос
/ 12 февраля 2010

или вы можете сделать что-то подобное, если не возражаете против расширения 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;
    }
}
1 голос
/ 27 мая 2009

Я знаю, как это описано в документации. Как при изменении selectedItem будет запускать прослушиватель изменений. Однако для меня этого не происходит. Кто-нибудь еще сталкивался с таким же поведением?

0 голосов
/ 22 июня 2009

Это выглядит как отличный подход: сделать атрибут value доступным для записи: http://flex.sys -con.com / узел / 312098

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...