|
|
|||||
.
|
ок.
Так? |
|
|||||
Регистрация: May 2009
Сообщений: 220
|
в яблочко
|
|
|||||
.
|
Собственно, резюме. Если у события target != null, то при диспетчеризации оно клонируется.
В моем примере флаг bubbles не имеет значения. |
|
|||||
Регистрация: May 2009
Сообщений: 220
|
ага
dimarik, раз уж такое дело - хотелось бы знать, реализация клонирования эвента в ваших моделях(Data) на каждом уровне "всплытия" (при наличии обработчиков) целесообразна? Так и задумывалось? Или проглядели, что в нативной системе эвент при баблинге не клонируется? (я должен был спросить, вдруг прокатит ) |
|
|||||
.
|
Уточнение. Клонирование скорее всего необходимо при event.target != null && event.target != this.
В нативной системе при диспатче (напр., Event.ADDED) не дергается dispatchEvent вообще. Соответственно, такая проверка не вызывается и событие не клонируется. У нашей Data клонируется, как Вы и указали, если среди прочих условий соблюдено parent.hasEventListener(event.type). И target клона устанавливается текущим диспетчером. |
|
|||||
Регистрация: May 2009
Сообщений: 220
|
Цитата:
Цитата:
По остальному: так ведь у вас целевой эвент не баблится непосредственно. Для этого у него есть эвент-обертка. Но вы все равно клонируете целевой эвент на всех уровнях (при наличии слушателей), который вообще не диспатчится. Он тащится наверх эстафетой из оберток. Смысл его клонировать? |
|
|||||
.
|
Да, мне понятна Ваша мысль. Я там приписал мелким шрифтом, что "клонирование скорее всего необходимо" при таких-то условиях )
Я пытаюсь рассуждать как должно быть, а не как это реализовано в FP. Если мы поймем зачем нужно клонирование событий, то его можно реализовать оптимальным способом. Клонирование само по себе необходимо для предотвращения изменений объекта по ссылке. Сравните: передали методу массив и он модифицировал его. А в вызывающем методе Вы предполагали, что он не изменится. Выход - либо передаем клон, либо в вызванном методе создаем клон. С другой стороны, конкретно в области event flow при выполнении диспетчеризации у событийного объекта должен быть установлен target того, кто его испустил. Здесь получается, что если бы не было клона, то неожиданно у всех предыдущих объектов-приемников поменялся бы event.target по ссылке. Но я диспатчу событие от того же передатчика. Здесь мне не нужен клон. Если я диспатчу событие, то мне будет важнее производительность. О создании клонов я могу позаботиться сам, зато избегу ненужных расходов. Кстати, иногда в проектах встречаю подобное Вот получается, что напрасно клонируют, оно само склонируется при ре-диспатче. Цитата:
BloodHound'а спросите, его детище. Я вообще использую в модели дисплей-объекты. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Нет, вы просто занимаетесь фигней. Ну это примерно как постоянно ходить в перчатках сварщика, чтобы затраховаться от засовывания рук в печку.
|
|
|||||
Регистрация: May 2009
Сообщений: 220
|
Цитата:
Вам удобнее так, мне - иначе. Вот и весь сказ Разумно. Однако, думаю, это защита от дурака. Т.е., например, первое распространение события еще не закончилось, а прогер уже задиспатчил эвент от того же объекта повторно. Допустим, без "пузырей". В итоге у события повисает фаза "цели". И когда поток исполнения программы возращается к баблингу первого события, уже имеется косяк: event.eventPhase === 2. Сомневаюсь, что такие мелочи проверяются перед каждым обработчиком. ни то, ни другое. Я лишь подсмотрел тот узкий участок, который и так в многочисленных темах уже почти целиком было рассмотрен, разжеван, еще и тесты производительности приведены. Просто убедился ))) |
|
|||||
.
|
Ах, вот как! Следовательно. клонирование необходимо так же и для того, чтобы фазу на попортить.
А не напомните, где тот узкий участок был рассмотрен в темах? |
Часовой пояс GMT +4, время: 12:07. |
|
« Предыдущая тема | Следующая тема » |
Теги |
flash , Лень , Проектирование , события |
Опции темы | |
Опции просмотра | |
|
|