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

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

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
По умолчанию Как реализован bindable?

Пишу именно в этот топик так как меня интересуют какими инструмента AS3 можно что-то такое реализовать.

По ходу там должно происходить нечто типа:

Код AS3:
[Bindable]
public var foo:String;
Превращается в:

Код AS3:
public function set foo(val:String):void{
     _foo = val;
     dispatchEvent(new Event(Event.CHANGE));
}
Ну хорошо, но как реализовать такое переопределение в рантайме, не наследуясь от flash.utils.Proxy?
__________________
ranga

Старый 30.01.2012, 06:22
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 2  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
А что именно надо?
Может как-то иначе решить?
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 30.01.2012, 06:28
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 3  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Не надо ничего. Просто если это реализовано, значит кто то это реализовал, значит это возможно реализовать. Вот мне и интересно как. Просто любопытно =)
__________________
ranga

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Ну так флексовые исходники открыты ведь. Посмотреть можно.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 30.01.2012, 11:14
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 5  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Оно?
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 30.01.2012, 12:33
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Ну хорошо, но как реализовать такое переопределение в рантайме, не наследуясь от flash.utils.Proxy?
Метатег Bindable это инструкция компилятору, диспатч события добавляется на этапе компиляции.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.01.2012, 22:18
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 7  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
ясно, понял. спасибо за ответы.
__________________
ranga

Старый 31.01.2012, 04:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Это на самом деле только чать ответа: кроме непосредственно события есть еще и сгенерированных код слушателей. Он не просто ужасный, он тошнотворный Смысл примерно следующий:
Код:
<foo bar="{baz.booz}"/>
превращается примерно вот во что:
Код:
ThisClass.bindings.push(function(){ foo.bar = baz.booz; })
+ где-то еще код непосредственно подписки на событие. Но это мелочь по сравнению с тем, что биндинги будут вызываться и тогда, когда baz не существует - т.е. произойдет ошибка попытки чтения из свойства нулл-объекта. Ну, а чтобы не пугать разработчиков, эти ошибки, завернуты в try-catch. Т.е. биндинг превращается в неюзабельную кашу, изза которой, например, наследовать класс использующий биндинг, вобщем, нет смысла. Вместо того, чтобы по-человечески добавить слушатель, который потом программист при желании мог бы повторно использовать, или подправить под собственные нужды создается кусок кода, который можно только выбросить врезультате.
__________________
Hell is the possibility of sanity

Старый 31.01.2012, 12:32
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
превращается примерно вот во что:
Превращение вполне логично, если учитывать, что биндить можно не только значение, но и выражения и функции преобразующие значения.
Автогенерированный код, как правило, выглядит не очень. В любой системе.
Цитата:
Вместо того, чтобы по-человечески добавить слушатель, который потом программист при желании мог бы повторно использовать, или подправить под собственные нужды создается кусок кода, который можно только выбросить врезультате.
Хмм... И как бы это должно было выглядеть?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 31.01.2012, 16:58
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Автоматически сгенерированный код в той же студии выглядит куда приличнее. Конечно, там тоже бывает, но в тривиальных ситуациях - код нормальный. Во флексе в принципе, система порочная, просто не бывает ситуаций, когда сгенерированный код не возможно было бы написать гораздо лучше.
Как бы это выглядело: все, что реализует IBindingClient (или IBindingClient2 - еще один замечеательный момент в СДК) реализовывало бы propertyChangeHandler, в который бы передавалась строка описывающая путь к измененному свойству. Собственно, похожим способом, как реализованы рантайм биндинги, только без попыток что-то скрыть, и ради этой скрытности наворотить кучу идиотизмов.
Соответственно, если в ответ на событие нужно было бы вызвать сгенерированный метод класса, а не анонимную функцию которую из класса-наследника и не достать особенно. Т.е. если смотреть на мой пример выше, то был бы сгенерирован примерно следующий код:
Код AS3:
protected function initBindings():void
{
	. . .
	this._bindings["baz.booz"] = this.generatedBinding;
	. . .
}
 
public function propertyChangeHandler(property:String):void
{
	this._bindings[property]();
}
 
protected function generatedBinding():void
{
	this.foo.bar = this.baz.booz;
}
И не нужно ловить ошибки, и создавать видимость чего-то не понятного для разработчика. Если foo или baz нету на момент выполнения биндинга - пусть у разработчика болит голова, как это победить. А то получается ситуация, когда в половине случаев код, который в принципе не может выбросить исключения - типа чтения из константы - заворачивается в try-catch, и, наоборот, в оставшеся половине случаев, когда необходимо получить ошибку, чтобы понять, что что-то не успело проинициализироваться, или не правильно был определен порядок инициализации, все будет молчать.
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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