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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.06.2010, 23:39
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 31  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
ок.

Код AS3:
var event:Event = new Event(Event.CHANGE, true);
super.dispatchEvent(event);
super.dispatchEvent(event); // диспетчеризация клона
Так?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.06.2010, 23:58
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 32  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
в яблочко

Старый 11.06.2010, 00:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 33  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Собственно, резюме. Если у события target != null, то при диспетчеризации оно клонируется.

В моем примере флаг bubbles не имеет значения.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.06.2010, 00:18
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 34  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от dimarik Посмотреть сообщение
Если у события target != null, то при диспетчеризации оно клонируется.
ага

dimarik, раз уж такое дело - хотелось бы знать, реализация клонирования эвента в ваших моделях(Data) на каждом уровне "всплытия" (при наличии обработчиков) целесообразна? Так и задумывалось? Или проглядели, что в нативной системе эвент при баблинге не клонируется?

(я должен был спросить, вдруг прокатит )

Старый 11.06.2010, 00:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 35  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Уточнение. Клонирование скорее всего необходимо при event.target != null && event.target != this.

В нативной системе при диспатче (напр., Event.ADDED) не дергается dispatchEvent вообще. Соответственно, такая проверка не вызывается и событие не клонируется. У нашей Data клонируется, как Вы и указали, если среди прочих условий соблюдено parent.hasEventListener(event.type). И target клона устанавливается текущим диспетчером.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.06.2010, 01:11
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 36  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от dimarik Посмотреть сообщение
Уточнение. Клонирование скорее всего необходимо при event.target != null && event.target != this.
в этом примере:
Цитата:
Сообщение от dimarik Посмотреть сообщение
Код AS3:
var event:Event = new Event(Event.CHANGE, true);
super.dispatchEvent(event);
super.dispatchEvent(event); // диспетчеризация клона
и объект события один и тот же, и объект его испускающий один и тот же. Но при этом событие все равно клонируется. Так что второе условие, скорей всего - не подходит.

По остальному: так ведь у вас целевой эвент не баблится непосредственно. Для этого у него есть эвент-обертка. Но вы все равно клонируете целевой эвент на всех уровнях (при наличии слушателей), который вообще не диспатчится. Он тащится наверх эстафетой из оберток. Смысл его клонировать?

Старый 11.06.2010, 01:45
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 37  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от switcher! Посмотреть сообщение
Так что второе условие, скорей всего - не подходит.
Да, мне понятна Ваша мысль. Я там приписал мелким шрифтом, что "клонирование скорее всего необходимо" при таких-то условиях )

Я пытаюсь рассуждать как должно быть, а не как это реализовано в FP. Если мы поймем зачем нужно клонирование событий, то его можно реализовать оптимальным способом. Клонирование само по себе необходимо для предотвращения изменений объекта по ссылке. Сравните: передали методу массив и он модифицировал его. А в вызывающем методе Вы предполагали, что он не изменится. Выход - либо передаем клон, либо в вызванном методе создаем клон.

С другой стороны, конкретно в области event flow при выполнении диспетчеризации у событийного объекта должен быть установлен target того, кто его испустил. Здесь получается, что если бы не было клона, то неожиданно у всех предыдущих объектов-приемников поменялся бы event.target по ссылке. Но я диспатчу событие от того же передатчика. Здесь мне не нужен клон.

Если я диспатчу событие, то мне будет важнее производительность. О создании клонов я могу позаботиться сам, зато избегу ненужных расходов.

Кстати, иногда в проектах встречаю подобное
Код AS3:
function handler(event:Event):void {
    // что-то тут делают
    dispatchEvent( event.clone() )
}
Вот получается, что напрасно клонируют, оно само склонируется при ре-диспатче.


Цитата:
По остальному: так ведь у вас целевой эвент не баблится непосредственно. Для этого у него есть эвент-обертка. Но вы все равно клонируете целевой эвент на всех уровнях (при наличии слушателей), который вообще не диспатчится. Он тащится наверх эстафетой из оберток. Смысл его клонировать?
Реверс инженеринг или Вы начали работать у нас? )
BloodHound'а спросите, его детище. Я вообще использую в модели дисплей-объекты.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.06.2010, 09:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 38  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от switcher! Посмотреть сообщение
P.S. Я не занимаюсь миссионерством.
Нет, вы просто занимаетесь фигней. Ну это примерно как постоянно ходить в перчатках сварщика, чтобы затраховаться от засовывания рук в печку.

Старый 11.06.2010, 14:26
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 39  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от etc Посмотреть сообщение
Нет, вы просто занимаетесь фигней. Ну это примерно как постоянно ходить в перчатках сварщика...
Я не использую геттеры в эвентах "постоянно". К тому же, вы сами не редко руководствуетесь в программировании правилом "шаг влево, шаг вправо - расстрел". И я не вижу ничего зазорного в использовании геттеров, особенно, когда производительность не критична.
Вам удобнее так, мне - иначе. Вот и весь сказ

Цитата:
Сообщение от dimarik Посмотреть сообщение
Я пытаюсь рассуждать как должно быть...
Разумно.
Однако, думаю, это защита от дурака. Т.е., например, первое распространение события еще не закончилось, а прогер уже задиспатчил эвент от того же объекта повторно. Допустим, без "пузырей". В итоге у события повисает фаза "цели". И когда поток исполнения программы возращается к баблингу первого события, уже имеется косяк: event.eventPhase === 2. Сомневаюсь, что такие мелочи проверяются перед каждым обработчиком.

Цитата:
Сообщение от dimarik Посмотреть сообщение
Реверс инженеринг или Вы начали работать у нас? )
ни то, ни другое. Я лишь подсмотрел тот узкий участок, который и так в многочисленных темах уже почти целиком было рассмотрен, разжеван, еще и тесты производительности приведены. Просто убедился )))

Старый 11.06.2010, 16:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 40  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ах, вот как! Следовательно. клонирование необходимо так же и для того, чтобы фазу на попортить.

А не напомните, где тот узкий участок был рассмотрен в темах?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Теги
flash , Лень , Проектирование , события
Опции темы
Опции просмотра

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

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


 


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


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