Показать сообщение отдельно
Старый 20.07.2013, 14:35
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 1  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию MVC. Контроллеры

Здравствуйте.
Решил попробывать написать проект и использованием MVC-модели. Если я все правильно понял, Модель - это хранилище данных, ссылки которые раздаются вьюверам.
Вьюверы в свою очередь обновляют данные когда изменились данные в модели.
Контроллер - это механизм который создает вьюверы, модели, а так же осуществляет создание связей между ними.

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

основной класс
Код AS3:
package  {
 
	import flash.display.Sprite;
 
	import me.inpictures.worker.Framework;
	import me.inpictures.worker.Auth;
	import me.inpictures.worker.amf.AMF
 
	public class InPictures extends Sprite {
 
		private var framework:Framework = new Framework();
 
		public function InPictures() {
 
			new AMF('http://dev.net/app/Amfphp/');
 
			framework.addTask(new Auth());
			framework.run();
		}
	}
}
framework
Код AS3:
package me.inpictures.worker {
 
	import flash.events.Event;
 
	public class Framework {
 
		private var _autorun:Boolean;
 
		private var _task:Vector.<Worker>;
 
		public function Framework(autorun:Boolean = true) {
 
			_autorun = autorun;
 
			_task = new Vector.<Worker>; 
		}
 
		public function addTask(worker:Worker):void {
			_task.push(worker);
		}
 
		public function run():void {
 
			if (_task.length) {
 
				var task:Worker = _task.pop();
					task.addEventListener(Event.COMPLETE, taskCompleteHandler );
					task.run();
			} else trace('Framework: TaskComplete');
		}
 
		private function taskCompleteHandler(event:Event):void {
 
			event.currentTarget.removeEventListener(Event.COMPLETE, taskCompleteHandler );
 
			if (_autorun) run();
		}
	}
}
Вот здесь возникает первый вопрос. При выполнении контроллера Auth у нас приходят данные от сервера, и если в данных содержится переменная "registration" значит нужно провести регистрацию пользователя, то-есть запустить отдельный контроллер. Как это правильно реализовать? Создать модель на подобии "центральной" модели приложения, где при выполнении контроллера Auth, модель приложения изменит к примеру статус и в соответствии главный контроллер удалит / создаст нужны окна или же мы из одного контроллера вызываем сразу второй? И в любом из случаев каким образом передаем нужный нам контроллер (экземпляр / константа + if ) ?
Код AS3:
package me.inpictures.worker {
 
	import flash.events.Event;
 
	import me.inpictures.data.User;
 
	import me.inpictures.worker.amf.AMF;
 
	public class Auth extends Worker {
 
		public function Auth() {
 
		}
 
		override public function run():void {
 
			AMF.call('User/auth', authHandler, User.simple );
		}
 
		private function authHandler(data:Object):void {
 
			if (data.registration) {
 
				trace('registration');
			}
 
			dispatchEvent(new Event(Event.COMPLETE));
		}
	}
 
}
Добавлено через 26 минут
P.s. Силой святого компилятора призываю к обсуждению Babylon =)
__________________
return this...


Последний раз редактировалось AlexCooper; 20.07.2013 в 15:20.