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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.09.2010, 15:41
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 1  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Так. А про какую модель идет речь сейчас — как узнает?
__________________
Поймай яблоко 2!

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

Регистрация: Sep 2002
Сообщений: 30,787
Непосредственно по вызываемому методу. Нужно уйти от абстрактного запроса данных к совершенно конкретному. Если контроллер хочет данные по меню, то APIController должен составить соответствующий реквест и идентифицировать приходящие данные по нему же. При получении данных вызвать соответствующий метод основного контроллера (если таковой в нём есть).

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

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

APIController — большой класс для работы с разными API. Имеет метод request(query:String, ... args);

MainController — основной класс. Имеет среди прочих публичные методы loadMainMenu(), loadFriends(user_id:int), loadPhotos(album_id:int) и т.д. Каждый метод формирует правильный запрос и по факту загрузки сам раскидывает данные по заведомо определенным для каждого метода моделям.

MenubarController — контроллер основного меню, который в частности вызывает метод MainController#loadMainMenu(), который сам выложит данные в MenubarModel по факту загрузки.

так?
__________________
Поймай яблоко 2!

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

Регистрация: Sep 2002
Сообщений: 30,787
Да, так. Можно, конечно, попросить APIController сделать что-нибудь в обход основного, но запрашивающий контроллер не является его клиентом.

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
etc, спасибо! стало понятно, что я совсем не вкурил в само дерево проекта.

Если в диалоговом окне динамически создается список для выбора друзей. Мы во время выполнения создаем новые экземпляры контроллера, модели и вида.

Как я понимаю каждая ветвь (контроллеры, модели, виды) должна быть древовидной и расти с помощью чего-то наподобие addChild.

В частности аналогом stage для любого контроллера должен выступать mainController (чтобы мы могли запрашивать его).

Если так, то в самом начале mainController еще не знает о еще не созданном friendsListModel, который будет ждать данных, когда friendsListController вызовет mainController.loadFriends(user_id), потому что вся эта тройка будет создана (может быть) если пользователь выберет соотв. пункт меню.

Разумеется при добавлении (addChild) модели можно событиями сообщить наверх вплоть до mainController, что появился новый ребенок-модель. Но как mainController поймет, что с ним делать дальше? Ну что именно сюда мы будем передавать список друзей, а сюда — список фоток и т.д. Интерфейс?
__________________
Поймай яблоко 2!

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

Регистрация: Sep 2002
Сообщений: 30,787
Список друзей принадлежит текущему пользователю. Изначально он пуст. Основной контроллер прекрасно знает о текущем пользователе и его списке друзей. Если запрашивается список друзей другого пользователя, то как минимум должен быть идентификатор этого пользователя в ответе, поэтому, опять же, нет проблемы взять нужного пользователя из модели и отдать ему друзей в основном контроллере.

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Пример.
За все время приложение запросит следующие данные:

- список друзей некоего пользователя
- список альбомов пользователя
- список фотографий из альбома

значит все эти модели должны быть публичными свойствами mainController:

Код:
public var friendsModel:FriendsModel = new FriendsModel();
public var albumsModel:AlbumsModel = new AlbumsModel();
public var photosModel:PhotosMidel = new PhotosModel();
и когда дело дойдет до создания списка фотографий, то мы в контроллере диалогового окна someWindowController, который имеет свои model и view делаем так:

Код:
var somePhotosListView:ListView = new ListView(mainController.photosModel);
var somePhotosListController:ListController = new ListController(
	mainController,				// ссылка на основной контроллер
	mainController.photosModel,		// модель
	this.somePhotosListView:ListView	// вид
);

this.model.addChild(mainController.photosModel);
this.view.addChild(this.somePhotosListView);
this.addChild(somePhotosListController);
Ход мысли туда?

Добавлено через 2 минуты
Ну насчет публичных свойств в mainController я поспешил — достаточно дать доступ через get
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 10.09.2010 в 17:27.
Старый 10.09.2010, 19:11
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
т.е. если переписать, то все модели должны быть свойствами mainModel:

Код:
public var friendsModel:FriendsModel = new FriendsModel();
public var albumsModel:AlbumsModel = new AlbumsModel();
public var photosModel:PhotosMidel = new PhotosModel();
someWindowController создаем так:

Код:
var someWindowController:ListController = new WindowController(
	mainController,		// ссылка на основной контроллер
	mainModel,		// ссылка на основной контроллер
	someWindowModel,
	someWindowView
);
т.е. окно всегда среди прочих параметров принимает еще и mainModel, потому что часто создает группы MVC, где модель — это что-то из списка первой троицы.

а уже конкретный список создаем так:

Код:
var somePhotosListView:ListView = new ListView(mainModel.photosModel);
var somePhotosListController:ListController = new ListController(
	mainController,			// ссылка на основной контроллер
	mainModel.photosModel,		// модель
	this.somePhotosListView		// вид
);

this.model.addChild(mainModel.photosModel);	// и вот этого я так понимаю делать не надо?
this.view.addChild(this.somePhotosListView);
this.addChild(somePhotosListController);
теперь как?
__________________
Поймай яблоко 2!

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

Регистрация: Sep 2002
Сообщений: 30,787
Нет, не туда.
Френды и прочая должны быть свойствами UserModel и создаваться сразу с ним. ListView получает линк на user.photos. Контроллер SomeWindowController имеет линк либо на user, либо весь model (хотя он ему и не нужен), у которого есть currentUser.

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

Регистрация: Sep 2002
Сообщений: 30,787
addChild не надо. И вообще, я не очень вкурил, где располагается последний код и что такое this.model почему это не mainModel.

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

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

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


 


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


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