|
|
|||||
Регистрация: Aug 2012
Сообщений: 108
|
Starling binding
Добрый вечер. Решил попытаться приобщиться на этом форуме к best practices. Ситуация следующая: автор Feathers на форуме сообщил, что сигналы теперь лучше не использовать поскольку события старлинга очень даже good. Я решил переписать для начала бинды флекса [Bindable]. Первоначальный вариант получился такой, что на каждую переменную пришлось делать гет-сет, которые раздули всю модель в несколько раз и из переменных + 3-4 функций в сумме около 100 строк (на всю модель) получилось строк 300. К тому же, сеттеры приходилось делать копипастой, что не слишком-то меня устроило. Решил сделать
Кусок модели-синглтона public class StateManager extends EventDispatcher private static var _instance: StateManager = new StateManager(); public static function get instance(): StateManager { return _instance; } public var _state: uint = STATE_LOADING; public function get state(): uint { return _state; } public function set state(value: uint): void { Bind.masterSetter(instance, "_state", value); } import starling.events.Event; import starling.events.EventDispatcher; public class Bind { public static const VARIABLE_CHANGE_ENDING: String = "_changed"; public function Bind() { if (Bind) throw new Error("Bind is abstract."); } public static function masterSetter(host: EventDispatcher, varName: String, value: Object): void { if (host[varName] == value) return; host[varName] = value; trace(varName, value); host.dispatchEvent(new Event(varName + VARIABLE_CHANGE_ENDING)); } public static function bindSetter(setter: Function, host: EventDispatcher, varName: String): void { host.addEventListener(varName + VARIABLE_CHANGE_ENDING, setter); } public static function bindProperty(site: Object, varName: String, host: EventDispatcher, chain: String): void { host.addEventListener(chain + VARIABLE_CHANGE_ENDING, bindChanged); function bindChanged(e: Event): void { site[varName] = host[chain]; } } } Известные проблемы: для использования функции masterSetter( Удобства: Ну вообщем-то вроде как толковая замена стандартному бинду флекса без всяких изысков на событиях старлинга, которые реально стоит использовать в противовес стандартным флэшовым событиям. Варианты: Может, попробовать сделать Bind не как класс, а как отдельные функции через include чтобы переменные были private? Либо есть вариант в каком-то фреймворке делать BindInt, BindString etc. Последний раз редактировалось Psijic; 08.03.2014 в 20:58. |
Часовой пояс GMT +4, время: 15:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
bind , Binding , MVC , Starling , связывание |
Опции темы | |
Опции просмотра | |
|
|