разу оговорюсь, что я мало понимаю в этом,
но если единственной задачей этой конструкции будет синхронизация свойств, то я не вижу почему бы по-простому не создать словарь соответствий и менять свойства напрямую, без посредников (событий)
Код AS3:
package
{
import flash.utils.describeType;
import flash.utils.Dictionary;
public class Bind
{
public static var map:Dictionary = new Dictionary();
public function Bind()
{
throw("Bind is static");
}
public static function update(src:Object, prop:String):void
{
if (map[src] && map[src][prop])
{
for each(var obj:Object in map[src][prop])
{
obj.targ[obj.prop]= src[prop];
}
}
}
public static function bindProperty(src: Object, srcProp: String, targ: Object, targProp: String): void
{
if (!map[src]) map[src] = {};
if (!map[src][srcProp]) map[src][srcProp] = [];
map[src][srcProp].push( { targ:targ, prop:targProp } );
}
}
}
Код AS3:
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public var prop:String;
public function Main():void
{
var test:Test = new Test();
var test2:Object = { };
Bind.bindProperty(test, "prop", this, "prop");
Bind.bindProperty(test, "prop", test2, "prop");
test.prop = "newValue";
trace( "this.prop : " + this.prop );
trace( "test2.prop : " + test2.prop );
}
}
}
Код AS3:
package
{
public class Test
{
private var _prop:String = "xx";
public function Test() {}
public function get prop():String
{
return _prop;
}
public function set prop(value:String):void
{
if (_prop != value)
{
_prop = value;
Bind.update(this, "prop");
}
}
}
}