An easy way to have a pseudo bindable proxy with typed accessor in flex/as3 :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="{onComplete(event)}">
<mx:Script>
<![CDATA[
import nc.examples.PseudoSingletonProxy;
[Bindable]
protected var o1 : PseudoSingletonProxy;
[Bindable]
protected var o2 : PseudoSingletonProxy;
import mx.events.FlexEvent;
private function onComplete (e:FlexEvent) : void
{
removeEventListener(FlexEvent.CREATION_COMPLETE,onComplete,false);
o1 = new PseudoSingletonProxy ();
o2 = new PseudoSingletonProxy ();
}
private function onClick1(e:MouseEvent) : void
{
o1.myVar = Math.random().toString();
}
private function onClick2(e:MouseEvent) : void
{
o2.myVar = Math.random().toString();
}
]]>
</mx:Script>
<mx:HBox
width="100%"
>
<mx:Label
text="o1.myVar"
/>
<mx:Label
text="{o1.myVar}"
/>
</mx:HBox>
<mx:HBox
width="100%"
>
<mx:Label
text="o2.myVar"
/>
<mx:Label
text="{o2.myVar}"
/>
</mx:HBox>
<mx:HBox width="100%">
<mx:Button
label="Change o1.myVar"
click="{onClick1(event)}"
/>
<mx:Button
label="Change o2.myVar"
click="{onClick2(event)}"
/>
</mx:HBox>
</mx:Application>package nc.examples
{
import flash.events.IEventDispatcher;
import flash.events.Event;
import mx.managers.ISystemManager;
import mx.utils.ObjectProxy;
import flash.events.EventDispatcher;
import mx.events.PropertyChangeEvent;
[Mixin]
[Bindable('propertyChange')]
public class PseudoSingletonProxy implements IEventDispatcher
{
private static var __oProxy : ObjectProxy;
private static var __oED : EventDispatcher
private var _oProxy : ObjectProxy;
public function PseudoSingletonProxy () : void
{
_oProxy = __oProxy;
if (!_oProxy.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE))
{
_oProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,
onProxyPropertyChanged,
false,
0,
true);
}
}
public function set myVar (value:String) : void
{
_oProxy.myVar = value;
}
public function get myVar () : String
{
return _oProxy.myVar;
}
private function onProxyPropertyChanged (e:PropertyChangeEvent) : void
{
__oED.dispatchEvent(e);
}
public static function init (value:ISystemManager) : void
{
__oProxy = new ObjectProxy ();
__oED = new EventDispatcher ();
}
public function hasEventListener(type:String):Boolean
{
return __oED.hasEventListener(type);
}
public function willTrigger(type:String):Boolean
{
return __oED.willTrigger(type);
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0.0, useWeakReference:Boolean=false):void
{
__oED.addEventListener(type,listener,useCapture,priority,useWeakReference);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void
{
__oED.removeEventListener(type,listener,useCapture);
}
public function dispatchEvent(event:Event):Boolean
{
return __oED.dispatchEvent(event);
}
}
}
→ Read more...