![]() |
binding и addEventListerner
Столкнулся с проблемой получения события изменения переменной. Т.е. когда переменная изменяется нужно чтобы выполнилась функция. Но как это сделать ? Подскажите пожалуйста
Код AS3:
|
а не проще реализовать через сеттер?
Код AS3:
|
Цитата:
|
Тем не менее? Ситуации разные бывают.
|
Когда ты в Bindable указываешь имя события, которое означает изменение свойства, компилятор не создает обертку вокруг этой переменной, в которой бы генерировалось событие. Подразумевается, что ты сам будешь посылать это событие. Этот подход нужен когда ты делаешь, скажем, read - only свойство, которое должно участвовать в биндинге в mxml (в этом случае чтобы все работало придется добавить декларацию события в метаданных класса или mxml компонента) или присутствует какая-то сложная логика обработки событий.
В твоем случае можно сделать вот так. [Bindable] public var status:Boolean; private function changeStateContact(event:PropertyChangeEvent):void{ if (event.property == "status"){ currentState = "online"; } } и где-нибудь в инициализации компонента или в конструкторе класса добавить addEventListener(PropertyChangeEvent.PROPERTY_CHANGE,changeStateContact); |
Спасибо, это очень интересно и очень странно, получается использование [Bindable] только всё усложняет, а предназначено как раз упростить использование сеттеров и геттеров. И не вижу смысла тогда вообще его использовать, тем более, что в flash builder геттеры и сеттеры генерируются одним кликом на нужной переменной.
|
Видишь, мета теги Bindable и Event нужны скорее компилятору для генерации кода action script из mxml.
Например, если ты хочешь воткнуть в mxml нечно подобное <mx:Text text="{this.status ? 'статус установлен походу' : 'нихт арбайтен'}"/> и если ты не укажешь на переменной status тег Bindable, компилятор будет ругаться, что не удается засечь изменения переменной. В компилированном коде никаких метаданных нет, там будет обычные команды addEventListener ... dispatchEvent. Есть один интересный проект, который позволяет более удобно использовать деревянный механизм событий flex. Это mate framework. Ты там подключаешь одну библиотечку, создаешь в mxml маппинг где расписывается на какие события каких классов будут подключены какие обработчики, там можно отслеживать изменения свойств объектов. Потом этот маппинг надо вставить где - нибудь в mxml и все. Можно расписать целую цепочку событий при изменении какого-нибудь объекта. Для большого проекта это более удобно, чем вручную набивать кучу геттеров / сеттеров и отлавливать где что не работает |
| Часовой пояс GMT +4, время: 15:11. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.