У меня есть ArrayCollection, содержащий связанные объекты. Я хотел бы получить к ним доступ в нескольких местах, как показано ниже (для ясности есть только один ярлык). Как я могу это достичь? Должен ли я писать какую-либо оболочку для ArrayCollection, отправляющую специальное событие (которое?), Которое можно использовать для механизма событий Flex.ArrayCollection обертка, позволяющая механизму привязки видеть изменения
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()">
<mx:VBox>
<s:Label id="lb" text="{lab(col)}" />
<s:Button click="onC(event)" color="0x000000"/>
</mx:VBox>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CollectionEvent;
import mx.events.PropertyChangeEvent;
import spark.events.ListEvent;
[Bindable] private var col:ArrayCollection;
private function init():void {
col = new ArrayCollection();
col.addItem({ val: 1 });
col.addItem({ val: -1 });
}
private function onC(event:MouseEvent):void {
col.getItemAt(0).val++;
trace(col.getItemAt(0).val);
}
private function lab(_:ArrayCollection):String {
for(var i:int = 0; i < col.length; i++) {
if(col.getItemAt(i).val > 0)
return col.getItemAt(i).val.toString();
}
return "-666";
}
]]>
</fx:Script>
</s:Application>
Я хотел бы создать обертку, как это:
public class BindableArrayCollection extends EventDispatcher {
[Bindable] private var _ac:ArrayCollection;
public function BindableArrayCollection() {
this.ac = new ArrayCollection();
}
[Bindable]
public function set ac(val:ArrayCollection):void {
if(_ac != null)
_ac.removeEventListener(CollectionEvent.COLLECTION_CHANGE, toggleChangeEvent);
_ac = val;
if(_ac != null)
_ac.addEventListener(CollectionEvent.COLLECTION_CHANGE, toggleChangeEvent);
toggleChangeEvent();
}
public function get ac():ArrayCollection {
return _ac;
}
public function toggleChangeEvent(_:Object = null):void {
dispatchEvent(....);
}
}
так, что механизм связывания будет работать. Что я должен разместить вместо «....»?
На самом деле это может быть лучше пройти через ... http://www.swinburne.edu.au/design/tutorials/P-flash/T-How-to-build-a-Singleton-in-Actionscript- 3/ID-143/ –
Спасибо, но это не главное. Я знаю, что изменения в элементах внутри ArrayCollection не видны механизмом привязки. Я просто спрашиваю, как заставить его работать. Есть ситуация, когда у меня есть ArrayCollection с большим количеством элементов. Я хочу показать некоторые из них в меток, используя метод поиска, например. . Свойство «значение» обновляется каждую секунду, и я бы хотел, чтобы он отображался на экране. –