Событие VALUE_CHANGED
не отправляется коллекцией массива steveList, поэтому слушатель не обнаружит ее. Вы можете инкапсулировать нужные вам функции внутри класса NamesVO
, обнаруживая, когда элемент добавляется в коллекцию массивов, и добавляя прослушиватель к новому объекту steveVO
, который отправляет то же событие из NamesVO
. Тогда просто послушайте это событие в вашем основном классе.
Есть ли причина для изменения всех названий при изменении одного количества. Было бы лучше просто вызвать переименование внутри функции set класса steveVO
?
Для реализации изменения:
import flash.events.Event;
import mx.collections.ArrayCollection;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
[Bindable]
public class namesVO
{
public var steveList:ArrayCollection; // array of SteveVO objects
public function namesVO()
{
steveList = new ArrayCollection();
steveList.addEventListener(CollectionEvent.COLLECTION_CHANGE,collChanged);
}
private function collChanged(e:CollectionEvent):void
{
if (e.kind == CollectionEventKind.ADD)
e.items[0].addEventListener(steveVO.VALUE_CHANGED,valueChanged);
}
private function valueChanged(e:Event):void
{
dispatchEvent(new Event(steveVO.VALUE_CHANGED));
}
public function rename():void
{
for each(var steve:steveVO in steveList)
{
steve.rename();
}
}
}
В основном классе использовать:
names = new namesVO();
names.addEventListener(steveVO.VALUE_CHANGED, function():void
{
names.rename();
});
steve = new steveVO();
names.steveList.addItem(steve);
steve.quantity = 12;
Конечно, это только пример и включает только случай, когда за один раз добавляется один элемент.