Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подписаться на событие визуального компонента, находящегося в другой ветке. (http://www.flasher.ru/forum/showthread.php?t=137637)

microed 19.03.2010 13:10

Получается. что bubbling тоже зло?

etc 19.03.2010 20:54

Цитата:

Сообщение от microed (Сообщение 894166)
Получается. что bubbling тоже зло?

Если X зло, то не значит что и Y тоже зло. Вам бы с такими выводами законы писать, что ли.

microed 20.03.2010 05:33

Если Y основано на тех же механизмах, что и X, то чем же такой вывод нелогичен? И если capturing де "нарушает инкапсуляцию" (хотел бы я знать, где он ее нарушает), то почему же bubbling - нет?

etc 20.03.2010 13:14

Цитата:

Сообщение от microed (Сообщение 894349)
Если Y основано на тех же механизмах, что и X, то чем же такой вывод нелогичен? И если capturing де "нарушает инкапсуляцию" (хотел бы я знать, где он ее нарушает), то почему же bubbling - нет?

Нарушает, потому что позволяет перехватить событие, уходящее в черный ящик. А выходящие из него всплывающие события никакой инкапсуляции не нарушают.

Mur4ik 20.03.2010 13:46

Если по хорошему, то ни "Child1 Node" ни "Child2 Node" не должны вообще слушать каких либо событий для изменения своего состояния. Таким образом они получатся легко переносимыми и не так тесно связанными/зависящими от окружения.

Вместо подписывания на события они должны предоставить публичные методы для изменения своего состояния (желательно через интерфейсы) и заинтересованные в изменении этих компонентов объекты должны сами решать как и когда и на основе чего дергать эти методы.

Ну это если говорить о масштабируемости и переносимости и реюзабельности того что вы пишете. А для простейших случаев (когда проект маленький, типа написал и забыл) пойдет и "зло" и "не зло" нарушающее или нет любые идеологии :)

gloomyBrain 20.03.2010 14:06

Цитата:

Если по хорошему, то ни "Child1 Node" ни "Child2 Node" не должны вообще слушать каких либо событий для изменения своего состояния
Ну да, все правильно. Не для изменения своего состояния, а для отсылки сигнала в модель (M), которая затем обновит вид (V). Просто в данном случае контроллер (C) немного пересекается с видом. Но, по большому счету, от этого "пересечения" не избавиться, ибо события мыши происходят не сами по себе, а над каким-то визуальным объектом.
Это если смотреть на мир через призму MVC.

microed 20.03.2010 15:38

Цитата:

Сообщение от etc (Сообщение 894371)
Нарушает, потому что позволяет перехватить событие, уходящее в черный ящик. А выходящие из него всплывающие события никакой инкапсуляции не нарушают.

Это всё происходит снаружи, а сам "черный ящик" [объект] никто не трогает. Поэтому никакого нарушения инкапсуляции нет ни в том, ни в другом случае.

wvxvw 20.03.2010 15:52

Да-да, конечно. Но вот только если кто-то подписался на capture вашего события, а вы в свою очеред подписались только на target + bubbling (что вы всегда делаете по умолчанию) - и потом в его обработачике случилась ошибка, или он тупо взял и stopImmediatePropagation() сделал - результат: ваш код не работает, но сделать с этим вы ничего не можете.

Mur4ik 20.03.2010 17:26

Цитата:

Сообщение от gloomyBrain (Сообщение 894383)
Ну да, все правильно. Не для изменения своего состояния, а для отсылки сигнала в модель (M), которая затем обновит вид (V). Просто в данном случае контроллер (C) немного пересекается с видом. Но, по большому счету, от этого "пересечения" не избавиться, ибо события мыши происходят не сами по себе, а над каким-то визуальным объектом.
Это если смотреть на мир через призму MVC.

Что то вы перемудрили с постом :)

microed 20.03.2010 22:51

Цитата:

Сообщение от wvxvw (Сообщение 894395)
Да-да, конечно. Но вот только если кто-то подписался на capture вашего события, а вы в свою очеред подписались только на target + bubbling (что вы всегда делаете по умолчанию) - и потом в его обработачике случилась ошибка, или он тупо взял и stopImmediatePropagation() сделал - результат: ваш код не работает, но сделать с этим вы ничего не можете.

Нормальную инкапсуляцию такими глупостями не сбить. Не надо подписываться внутри объекта на события, предназначенные для dispatch'а другим, во вне. Внутри объекта генерим свои события для унутренного пользования. Потому что нет возможности контролировать способ, которым "кто-то подписался" снаружи: то ли поставил он flag на capture, то ли сбросил...


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

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