В свойство 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>
Таким образом, при каждом изменении какого-либо элемента списка отрабатывает событие, предоставляющее полную информацию об изменении.
Возможно существует другой способ получить это событие - я пока не нашел.
Комментариев нет:
Отправить комментарий