バインド可能なオブジェクトを含むArrayCollectionがあります。私は以下のような複数の場所でそれらにアクセスしたいと思います(分かりやすくするためにラベルは1つだけです)。それをどうすれば実現できますか?私は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を持っている状況があります。私は検索方法を使ってラベルの中のいくつかを示したいと思います。
。 「値」プロパティは毎秒更新され、画面に表示されるようにします。 –