Тема: Starling binding
Показать сообщение отдельно
Старый 11.03.2014, 10:41
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Код AS3:
dynamic class SexyModel extends Proxy implements IEventDispatcher{
	// todo: implement IEventDispatcher
    public function SexyModel() {
 
    }
 
    override flash_proxy function callProperty(methodName:*, ... args):* {
		// скажем, меняем свойство если обращаемся так: sexyModel.setCustomers(customers), sexyModel.setWaitFlag, т.е. метод начинается на 'set'
		// 1. проверяем подходит ли methodName под нашу маску (set*)
		// 2. меняем своё свойство. Например, если такого свойства у нас нет – лучше кинуть RTE или хотя бы warn самостоятельно, т.к. класс dynamic и VM за тебя это не сделает
		//	т.к. язык типизированный, идиологически придётся сравнивать даже типы вручную.
		// 3. диспатчим правильный эвент
    }
 
    override flash_proxy function getProperty(name:*):* {
		// или вариант, что все свойства к модели будут обращаться через [], типа sexyModel[sexyProperty] = 'sexyValue'
    }
 
    override flash_proxy function setProperty(name:*, value:*):void {
        // см. выше
    }
}
Возможные проблемы:
1) "свои" методы модели, возможно, придётся разруливать через тот же callProperty. Вероятно любое обращение к свойствам идёт через это callProperty, поэтому это накладывает свои ограничения, но они решаемы. Я точно не знаю, на as давненько не писал ничего серьезного.
2) Скорее всего это медленно. Чаще всего это не будет никого волновать, но для "узких" мест может потребоваться "настоящий" инлайн-код и прочий тектоник вокруг этой модели. Use wisely.