![]() |
|
||||||||||
|
|||||
|
Раз уж пошла такая пьянка, расскажите мне пожалуйста, как организовывается многокнопочный интерфейс.
Ну, вот если есть панель управления, на которой 100500 кнопок типа загрузить картинку, загрузить документ, загрузить музыку, загрузить видео и т.д. Кто слушает все эти кнопочки и решает что дальше делать? В голову просится ответ, что вьюшка слушает детей на предмет MouseEvent.CLICK, а потом диспатчит кастомное событие InterfaceEvent.LOAD_FILE с соответствующими свойствами. Точно так же - если мы захотим повесить хоткеи на эти кнопки, то вьюшка будет слушать KeyboardEvent.KEY_DOWN и вещать те же самые события. Но что-то внутри меня подбивает сделать обработку изначальных MouseEvent.CLICK и KeyboardEvent.KEY_DOWN уже в контроллере, т.к. это какбе уже принятие решения - как реагировать на действия пользователя. И даже если не пихать эту обработку в основной контроллер, то сделать для этой вьюшки своего личного контролерчика. Это что-то внутри нужно безжалостно давить, или холить и лелеять? |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Ну на самом деле можно и так и так.
Если вьюшка обрабатывает сама события своих детей - то она в рамках этого модуля - контроллер. Если мы говорим о иерархической MVC с древовидным ветвлением. Если мы не принимаем такое ветвление, то Всё это должен решать контроллер. Есть ещё промежуточный вариант. PresentationModel. Выбирать архитектуру теюбе. Нельзя сказать, что вот делай именно так. Всё зависит от контекста.
__________________
Отряд Котовскага |
|
|||||
|
Вот оно как, оказывается. Спасибо за пояснения.
ЗЫ Я кстати понял, почему мне древовидное ветвление в MVC тяжело дается. Пытаюсь думать кодом. А если нарисовать диаграмку, сразу так легко и понятно все становится. |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 95
|
MVP/MMVC больше подуше.
Spicelib, parsley нам в помощь. |
|
|||||
|
Цитата:
import flash.display.MovieClip; import org.flashdevelop.utils.FlashViewer; ///Host class Main extends MovieClip { public function Main() { new Controller( this ); } } ///Controller import flash.events.EventDispatcher; class Controller extends EventDispatcher { public function Controller(scene:Main, target:IEventDispatcher = null) { var model:Model = new Model(); var view:Viewer = new Viewer(model); scene.addChild( view ); } } ///Model class Model extends EventDispatcher { public const READY_DATA:String = "ready data"; public function Model() { ... } } ///View import flash.display.Sprite; class Viewer extends Sprite { public function Viewer(model:Model) { model.addEventListener( Model.READY_DATA, init); } private function init():void { ///start } } А кто представляет объект снаружи? Контроллер? Ну в данном случае, если напр. мейн захочет обратиться к вьюеру. Можно какой то мин. примерчик? Или пруф. |
|
|||||
|
Lorem ipsum
|
Примерно так.
Что он там забыл? Main создал контроллер и ушел на заслуженный отдых. Отец семейства теперь — твой главный контроллер. И он может всегда дотянуться до своей вьюхи. А потом приложение должно перейти в другую стадию. Тот же контроллер создаст новый контроллер, тот в свою очередь полностью возьмет на себя новый этап приложения, создаст новый view и будет с ним работать сам. По окончании просто приберет за собой и сообщит "папе", что все закончено. Главный контроллер будет с нетерпением ждать этого сообщения, чтобы решать, куда идем дальше. В общих чертах.
__________________
Поймай яблоко 2! |
|
|||||
|
По сути, Main - контейнер для вьюшек и инициализатор контроллера.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Controller в принципе не должен знать, что такое Main.
Константы имён событий надо объявлять в самих событиях. |
|
|||||
|
Да, конечно. Это пример написанный наспех. Контроллер может воспринимать Main как просто DOC, но мне все равно не нравится - не должен объект сам себя куда-то добавлять.
Цитата:
Мне удобнее традиционным способом - видно перечень констант в панели Outline. |
|
|||||
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:50. |
|
|
« Предыдущая тема | Следующая тема » |
|
|