Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.08.2011, 18:45
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 1  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
По умолчанию binding и addEventListerner

Столкнулся с проблемой получения события изменения переменной. Т.е. когда переменная изменяется нужно чтобы выполнилась функция. Но как это сделать ? Подскажите пожалуйста

Код AS3:
[Bindable (event = "statusChange")]
public var status:Boolean;
 
addEventListener("statusChange",changeStateContact);
 
private function changeStateContact():void{
currentState = "online";
}

Старый 22.08.2011, 18:52
xsar вне форума Посмотреть профиль Отправить личное сообщение для xsar Найти все сообщения от xsar
  № 2  
Ответить с цитированием
xsar

Регистрация: Mar 2011
Сообщений: 29
а не проще реализовать через сеттер?
Код AS3:
private var _status:Boolean;
public function set status(value:Boolean):void{
_status=value;
currentState = 'online';
}

Старый 22.08.2011, 19:01
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 3  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Цитата:
Сообщение от xsar Посмотреть сообщение
а не проще реализовать через сеттер?
Код AS3:
private var _status:Boolean;
public function set status(value:Boolean):void{
_status=value;
currentState = 'online';
}
Да спасибо , это то, что нужно.

Старый 22.08.2011, 21:19
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 4  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Тем не менее? Ситуации разные бывают.

Старый 26.08.2011, 16:03
son_of_war вне форума Посмотреть профиль Отправить личное сообщение для son_of_war Найти все сообщения от son_of_war
  № 5  
Ответить с цитированием
son_of_war

Регистрация: Mar 2006
Сообщений: 125
Отправить сообщение для son_of_war с помощью ICQ
Когда ты в 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);

Старый 28.08.2011, 15:32
cheluskin вне форума Посмотреть профиль Отправить личное сообщение для cheluskin Найти все сообщения от cheluskin
  № 6  
Ответить с цитированием
cheluskin

Регистрация: May 2011
Сообщений: 26
Спасибо, это очень интересно и очень странно, получается использование [Bindable] только всё усложняет, а предназначено как раз упростить использование сеттеров и геттеров. И не вижу смысла тогда вообще его использовать, тем более, что в flash builder геттеры и сеттеры генерируются одним кликом на нужной переменной.

Старый 29.08.2011, 13:19
son_of_war вне форума Посмотреть профиль Отправить личное сообщение для son_of_war Найти все сообщения от son_of_war
  № 7  
Ответить с цитированием
son_of_war

Регистрация: Mar 2006
Сообщений: 125
Отправить сообщение для son_of_war с помощью ICQ
Видишь, мета теги Bindable и Event нужны скорее компилятору для генерации кода action script из mxml.
Например, если ты хочешь воткнуть в mxml нечно подобное
<mx:Text text="{this.status ? 'статус установлен походу' : 'нихт арбайтен'}"/>
и если ты не укажешь на переменной status тег Bindable, компилятор будет ругаться, что не удается засечь изменения переменной.
В компилированном коде никаких метаданных нет, там будет обычные команды addEventListener ... dispatchEvent.

Есть один интересный проект, который позволяет более удобно использовать деревянный механизм событий flex. Это mate framework.
Ты там подключаешь одну библиотечку, создаешь в mxml маппинг где расписывается на какие события каких классов будут подключены какие обработчики, там можно отслеживать изменения свойств объектов.
Потом этот маппинг надо вставить где - нибудь в mxml и все.
Можно расписать целую цепочку событий при изменении какого-нибудь объекта. Для большого проекта это более удобно, чем вручную набивать кучу геттеров / сеттеров и отлавливать где что не работает


Последний раз редактировалось son_of_war; 29.08.2011 в 13:39.
Создать новую тему Ответ Часовой пояс GMT +4, время: 00:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:01.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.