![]() |
|
||||||||||
|
|
|
|||||
|
Lorem ipsum
|
Так. А про какую модель идет речь сейчас — как узнает?
__________________
Поймай яблоко 2! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Непосредственно по вызываемому методу. Нужно уйти от абстрактного запроса данных к совершенно конкретному. Если контроллер хочет данные по меню, то APIController должен составить соответствующий реквест и идентифицировать приходящие данные по нему же. При получении данных вызвать соответствующий метод основного контроллера (если таковой в нём есть).
|
|
|||||
|
Lorem ipsum
|
ага. теперь понял. вроде.
APIController — большой класс для работы с разными API. Имеет метод request(query:String, ... args); MainController — основной класс. Имеет среди прочих публичные методы loadMainMenu(), loadFriends(user_id:int), loadPhotos(album_id:int) и т.д. Каждый метод формирует правильный запрос и по факту загрузки сам раскидывает данные по заведомо определенным для каждого метода моделям. MenubarController — контроллер основного меню, который в частности вызывает метод MainController#loadMainMenu(), который сам выложит данные в MenubarModel по факту загрузки. так?
__________________
Поймай яблоко 2! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Да, так. Можно, конечно, попросить APIController сделать что-нибудь в обход основного, но запрашивающий контроллер не является его клиентом.
|
|
|||||
|
Lorem ipsum
|
etc, спасибо! стало понятно, что я совсем не вкурил в само дерево проекта.
Если в диалоговом окне динамически создается список для выбора друзей. Мы во время выполнения создаем новые экземпляры контроллера, модели и вида. Как я понимаю каждая ветвь (контроллеры, модели, виды) должна быть древовидной и расти с помощью чего-то наподобие addChild. В частности аналогом stage для любого контроллера должен выступать mainController (чтобы мы могли запрашивать его). Если так, то в самом начале mainController еще не знает о еще не созданном friendsListModel, который будет ждать данных, когда friendsListController вызовет mainController.loadFriends(user_id), потому что вся эта тройка будет создана (может быть) если пользователь выберет соотв. пункт меню. Разумеется при добавлении (addChild) модели можно событиями сообщить наверх вплоть до mainController, что появился новый ребенок-модель. Но как mainController поймет, что с ним делать дальше? Ну что именно сюда мы будем передавать список друзей, а сюда — список фоток и т.д. Интерфейс?
__________________
Поймай яблоко 2! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Список друзей принадлежит текущему пользователю. Изначально он пуст. Основной контроллер прекрасно знает о текущем пользователе и его списке друзей. Если запрашивается список друзей другого пользователя, то как минимум должен быть идентификатор этого пользователя в ответе, поэтому, опять же, нет проблемы взять нужного пользователя из модели и отдать ему друзей в основном контроллере.
|
|
|||||
|
Lorem ipsum
|
Пример.
За все время приложение запросит следующие данные: - список друзей некоего пользователя - список альбомов пользователя - список фотографий из альбома значит все эти модели должны быть публичными свойствами mainController: public var friendsModel:FriendsModel = new FriendsModel(); public var albumsModel:AlbumsModel = new AlbumsModel(); public var photosModel:PhotosMidel = new PhotosModel(); 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. |
|
|||||
|
Lorem ipsum
|
т.е. если переписать, то все модели должны быть свойствами mainModel:
public var friendsModel:FriendsModel = new FriendsModel(); public var albumsModel:AlbumsModel = new AlbumsModel(); public var photosModel:PhotosMidel = new PhotosModel(); var someWindowController:ListController = new WindowController( mainController, // ссылка на основной контроллер mainModel, // ссылка на основной контроллер someWindowModel, someWindowView ); а уже конкретный список создаем так: 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! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нет, не туда.
Френды и прочая должны быть свойствами UserModel и создаваться сразу с ним. ListView получает линк на user.photos. Контроллер SomeWindowController имеет линк либо на user, либо весь model (хотя он ему и не нужен), у которого есть currentUser. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
addChild не надо. И вообще, я не очень вкурил, где располагается последний код и что такое this.model почему это не mainModel.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|