среда, февраля 06, 2008

Событие от компонентов itemRenderer. Flex

Есть компонент список List, элементы которого являются компонентами (MXML) и задаются через свойство itemRenderer.
В свойство dataProvider указан [Bindable] массив ArrayCollection.
Каждый из элементов этого массива - объект [Bindable] класса с набором свойств, который порождается от EventDispatcher. В компонентах элементов списка свойства этого объекта указаны как источники данных: text="{data.name}" и change="data.text=text_input.text;".

При работе со списком, происходят изменения свойств любого из объектов списка. Свойства объектов элементов массива обновляются, меняют свои значения. Все хорошо.

Теперь, требуется получать событие обновления какого-либо элемента.
Я пошел обычным путем - подписался на прослушивание события PropertyChangeEvent.PROPERTY_CHANGE для каждого экземпляра элемента массива при его создании. Приблизительный код:

. . .

[Bindable]
public var some_list:ArrayCollection;

. . .

var item:TSomeListItem=new TSomeListItem(some_source.name, some_source.status);
item.addEventListener PropertyChangeEvent.PROPERTY_CHANGE,this.onPropertyChange,false,0,true);
this.some_list.addItem(item);

. . .

private function onPropertyChange(event:PropertyChangeEvent):void {
trace("Изменилось свойство", event.source, ".", event.property,"Было:", event.oldValue,"Стало:",event.newValue, "Тип изменения:", event.kind);
}

. . .

<mx:HorizontalList . . . dataProvider="{some_list}" itemRenderer="SomeListItemRenderer" id="some_list_box"></mx:HorizontalList>

Таким образом, при каждом изменении какого-либо элемента списка отрабатывает событие, предоставляющее полную информацию об изменении.
Возможно существует другой способ получить это событие - я пока не нашел.

Комментариев нет: