2014-01-19 2 views
0

У меня есть ситуация, когда я хочу использовать привязку данных из массива ArrayCollection для заполнения текстовых полей в виде Flex.AS3 привязка к определенным свойствам по индексу в ArrayCollection

ArrayCollection заполняется из объекта SQL Result. Я хранить ArrayColelction в моем классе модели с использованием методов получения и установки, как это:

private var _monthlyData:ArrayCollection; 

public function set monthlyData(value:ArrayCollection):void{ 
_monthlyData = value; 
} 

[Bindable] 
public function get monthlyData():ArrayCollection{ 
return _monthlyData; 
} 

я использую monthlyData как DataProvider для списка и т.д., который работает отлично. Мне также нужно использовать свойства в определенных индексах в этой коллекции как строки текстового поля. Когда заданы текстовые свойства текстового поля, я все равно не имею месячный массив arrayCollection.

текстовые поля установлены в другой внеклассной с имеет одноплодной ссылку на эту модель, так что я установить поля, как это на данный момент:

textField.text = _model.monthlyData.getItemAt(3).Month; 

Я хочу, чтобы настроить привязки к коллекции массива вместо просто используя этот метод присваивания, чтобы обновить этот элемент в массиве или заполнить или обновить весь массив массивов, он обновит текст textField. У меня проблемы с привязкой к работе.

Я использую bindageTools в данный момент, но также использовал встроенный as3 BindingUtils для небольшого эффекта.

я могу сделать следующее, который устанавливает начальный текст свойство правильно, но он не будет обновлять, когда ArrayCollection изменение:

Bind.fromProperty(_model.monthlyData.getItemAt(3),"Month").toProperty(textField, "text"); 

Так что, если кто-то может пожалуйста мне точку в правильном направлении, какой путь лучше всего чтобы получить привязку в чистом AS3 без MXML, я бы очень признателен.

Приветствие Marco

+0

Это происходит внутри ItemRenderer или вы выбираете один элемент из коллекции, которую хотите привязать к текстовому полю? Также около 'Текстовые поля устанавливаются в другом внешнем классе с использованием одноэлементной ссылки на эту модель': вы никогда не должны напрямую устанавливать значение элемента вида; установите модель и привяжите привязку данных соответствующим образом. – RIAstar

+0

Hi RIAstar. Это не происходит внутри средства визуализации элементов. У меня есть пара ярких ярлыков внутри искрового вида/скроллера/Vgroup ... Я хотел бы привязать их свойства текста к значению внутри ArrayCollection. –

ответ

2

Из кода вы предоставляете, я могу видеть, что monthlyData является Привязываемым, который прекрасно. Я буду предполагать, что _model также можно связывать.
Однако метод getItemAt() не может быть связан (он не будет отправлять события changechange, когда элементы меняют позиции в коллекции), поэтому текстовое свойство текстового поля не будет обновляться.

Что вы можете сделать что-то вроде этого:

[Bindable] 
public var selectedDate3:MyDate; 

<s:TextInput id="myTextInput" text="{selectedDate3.month}" /> 

или AS эквивалент (почему вы хотите, чтобы сделать вещи трудно на себя за меня, хотя)

BindingUtils.bindProperty(myTextInput, "text", selectedDate3, "month"); 

, а затем программно обновить selectedDate3:

_model.monthlyData.addEventListener(CollectionEvent.COLLECTION_CHANGE, updateSelected); 

private function updateSelected(event:CollectionEvent):void { 
    selectedDate3 = _model.monthlyData.getItemAt(3); 
} 

Обратите внимание, что month собственно ty MyDate также должны быть связываемыми.


Вы упомянули, что эти поля находятся в VGroup. Я предполагаю, что вы хотите отобразить топ-3 или что-то еще. Это все еще список.Было бы намного проще и чище делать это с помощью List или DataGroup и просто фильтровать ArrayCollection, чтобы отображать только первые 3 элемента (или любое другое правило для отображаемых элементов) или настроить DataGroup для отображения только трех элементов (это не имеет полосы прокрутки).

+0

Эй РИАСТАР. Спасибо за вашу помощь. Я должен придерживаться AS3, поэтому я пойду со сценарием слушателя, который вы показали. Вероятно, мне нужно переосмыслить свою структуру в долгосрочной перспективе, но сейчас это должно работать. Ценю вашу помощь. –