Тема: Starling binding
Показать сообщение отдельно
Старый 10.03.2014, 17:26
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
разу оговорюсь, что я мало понимаю в этом,
но если единственной задачей этой конструкции будет синхронизация свойств, то я не вижу почему бы по-простому не создать словарь соответствий и менять свойства напрямую, без посредников (событий)

Код 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");
 
			}
 
		}
 
	}
 
}