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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.10.2011, 13:32
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 361  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Раз уж пошла такая пьянка, расскажите мне пожалуйста, как организовывается многокнопочный интерфейс.
Ну, вот если есть панель управления, на которой 100500 кнопок типа загрузить картинку, загрузить документ, загрузить музыку, загрузить видео и т.д. Кто слушает все эти кнопочки и решает что дальше делать?

В голову просится ответ, что вьюшка слушает детей на предмет MouseEvent.CLICK, а потом диспатчит кастомное событие InterfaceEvent.LOAD_FILE с соответствующими свойствами.
Точно так же - если мы захотим повесить хоткеи на эти кнопки, то вьюшка будет слушать KeyboardEvent.KEY_DOWN и вещать те же самые события.

Но что-то внутри меня подбивает сделать обработку изначальных MouseEvent.CLICK и KeyboardEvent.KEY_DOWN уже в контроллере, т.к. это какбе уже принятие решения - как реагировать на действия пользователя. И даже если не пихать эту обработку в основной контроллер, то сделать для этой вьюшки своего личного контролерчика.

Это что-то внутри нужно безжалостно давить, или холить и лелеять?

Старый 31.10.2011, 18:09
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 362  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Ну на самом деле можно и так и так.
Если вьюшка обрабатывает сама события своих детей - то она в рамках этого модуля - контроллер.
Если мы говорим о иерархической MVC с древовидным ветвлением. Если мы не принимаем такое ветвление, то Всё это должен решать контроллер.
Есть ещё промежуточный вариант.
PresentationModel.
Выбирать архитектуру теюбе. Нельзя сказать, что вот делай именно так. Всё зависит от контекста.
__________________
Отряд Котовскага

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Вот оно как, оказывается. Спасибо за пояснения.

ЗЫ Я кстати понял, почему мне древовидное ветвление в MVC тяжело дается. Пытаюсь думать кодом. А если нарисовать диаграмку, сразу так легко и понятно все становится.

Старый 12.12.2011, 20:29
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 364  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
MVP/MMVC больше подуше.

Spicelib, parsley нам в помощь.

Старый 23.12.2011, 14:45
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 365  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от Zebestov Посмотреть сообщение
В любом MVC ни при каком раскладе и ни на каком этапе выполнения приложения входной точкой не должен становиться view, для которого все же существует controller. У меня он тоже "тонкий", но входная точка на каждом этапе приложения — именно контроллер. Именно он всех инициирует, собирает докучи и запускает в нужном порядке. Если не поздно — подумай над реорганизацией.
Т.е. как концептуально это выглядит? Примерно так?

Код AS3:
 
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
	}
}

А кто представляет объект снаружи? Контроллер? Ну в данном случае, если напр. мейн захочет обратиться
к вьюеру.

Можно какой то мин. примерчик? Или пруф.

Старый 23.12.2011, 16:44
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 366  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от fish_r Посмотреть сообщение
Т.е. как концептуально это выглядит? Примерно так?
Примерно так.

Цитата:
Сообщение от fish_r Посмотреть сообщение
Ну в данном случае, если напр. мейн захочет обратиться к вьюеру.
Что он там забыл? Main создал контроллер и ушел на заслуженный отдых. Отец семейства теперь — твой главный контроллер. И он может всегда дотянуться до своей вьюхи. А потом приложение должно перейти в другую стадию. Тот же контроллер создаст новый контроллер, тот в свою очередь полностью возьмет на себя новый этап приложения, создаст новый view и будет с ним работать сам. По окончании просто приберет за собой и сообщит "папе", что все закончено. Главный контроллер будет с нетерпением ждать этого сообщения, чтобы решать, куда идем дальше.

В общих чертах.
__________________
Поймай яблоко 2!

Старый 23.12.2011, 17:09
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 367  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
По сути, Main - контейнер для вьюшек и инициализатор контроллера.

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

Регистрация: Sep 2002
Сообщений: 30,787
Controller в принципе не должен знать, что такое Main.
Константы имён событий надо объявлять в самих событиях.

Старый 24.12.2011, 23:49
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 369  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от etc Посмотреть сообщение
Controller в принципе не должен знать, что такое Main.
Да, конечно. Это пример написанный наспех. Контроллер может воспринимать Main как просто DOC, но мне все равно не нравится - не должен объект сам себя куда-то добавлять.

Цитата:
Константы имён событий надо объявлять в самих событиях.
Имеется в виду так?

Код AS3:
  [Event( name="some event" type="com.somepack.SomeClass" )]
Мне удобнее традиционным способом - видно перечень констант в панели Outline.

Старый 25.12.2011, 01:53
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 370  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Имеется в виду так?
Нет, имеется ввиду определение этих констант в наследнике Event.

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

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

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


 


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


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