PureMVC Посредники и взгляды - создание и контроль - PullRequest
2 голосов
/ 17 августа 2011

Я делаю приложение с flash AS3 и puremvc, способ корректной обработки медиаторов представления - это своего рода немного ...

ОК - у меня есть 3 или 4 разных представления, каждое из которых управляется своим собственным посредником. Каждый вид отображается только сам по себе - т.е. когда 1 виден / на сцене - остальные невидимы / удалены со сцены (слишком упрощенно, но я думаю, что это можно рассматривать как отдельные страницы, просматриваемые по одной за раз, панель навигации позволяет пользователю менять представления, когда им нравится)

Сначала каждый посредник вида, который я создавал и добавлял на сцену, представлял свой собственный компонент представления, и поэтому, когда нужно было «включить» показ или скрытие этого представления, это было просто - addChild и removeChild для его компонента представления.

Тем не менее, я прочитал на puremvc.org, что это плохая практика а. обойти этап (который был viewComponent для каждого посредника в моем случае - где каждое представление было добавлено - например, viewComponent.addChild (foo) б. создать свой собственный вид - что позволило мне добавить и удалить его в первую очередь.

Поэтому я перешел на рекомендованный способ - при создании каждого посредника я передаю компонент представления, которым он управляет (а не класс stage / main doc)

например.

var view:MyView = new MyView();
facade.registerMediator( new MyViewMediator( view ) );
viewComponent.addChild(view);

Итак - в этом случае - я понятия не имею, как бы я удалял / добавлял каждое представление при необходимости. Я мог бы легко установить видимость внутри каждого посредника, но я хотел избежать этого - предпочел бы удаление, когда оно не используется для управления ресурсами ...

Кто-нибудь получил какие-нибудь хорошие идеи, как мне «предназначить» это сделать (например, когда представление больше не нужно на сцене, удалите его - временно, и добавьте позже, когда это необходимо?) - или я что-то упускаю (вполне вероятно!) и поступаю неправильно? Я очень новичок в puremvc, поэтому не слишком уверен, что подхожу к этому правильно. Указатели приветствуются!

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Я не буду претендовать на звание эксперта в PureMVC, но мне нравится работать только для создания посредника для основных областей сайта.Например, HeaderMediator, FooterMediator и ViewMediator.Затем у меня есть ApplicationMediator, который "onRegister" создаст других только что упомянутых посредников.Таким образом, я не создаю посредника для каждого отдельного представления, а «ViewMediator» управляет переключением между представлениями.Вот как будет выглядеть моя функция «onRegister»:

override public function onRegister():void {
    var viewContainer:Sprite = viewComponent.addChild(new Sprite()) as Sprite;
    facade.registerMediator(new ViewMediator(viewContainer));

    var headerContainer:Sprite = viewComponent.addChild(new Sprite()) as Sprite;
    facade.registerMediator(new HeaderMediator(headerContainer));

    var footerContainer:Sprite = viewComponent.addChild(new Sprite()) as Sprite;
    facade.registerMediator(new FooterMediator(footerContainer));
}

Далее у меня будет ViewProxy, у которого есть пул представлений, сидящий и ожидающий вызова (в массиве, словаре или векторе).Когда пришло время изменить или установить представление, я использую команду ChangeViewCommand, которая извлекает представление из ViewProxy и отправляет уведомление (например, SET_VIEW) с объектом представления в качестве тела.

Теперь ViewMediator будет обрабатыватьуведомление "SET_VIEW".Если это что-то столь же простое, как removeChild (oldView) и addChild (newView), тогда я просто обработаю это в самом Mediator.Если переход необходим и требует больше кода, я буду использовать команду для обработки перехода.

Надеюсь, что это имеет смысл и помогает.Конечно, мне нравится менять вещи и пробовать новые, поэтому, если у вас есть какие-либо вопросы или предложения, я готов их выслушать.

0 голосов
/ 30 августа 2011

Как упомянул FlexFiend, об этой ситуации легче разобраться в средах второго поколения (по крайней мере, в Robotlegs, я не могу говорить за другие).Это потому, что обычно вы никогда не создаете и не уничтожаете посредника в Robotlegs;вместо этого вы связываете посредник с компонентом представления, и Robotlegs постоянно наблюдает за этапом добавления и удаления компонентов представления и создает и уничтожает экземпляры соответствующих посредников.

Поэтому один подход для реализации такого рода вещей в PureMVCдолжен иметь StageMediator с самой сценой в качестве компонента представления и прослушивать события Event.ADDED_TO_STAGE и Event.REMOVED_FROM_STAGE.Наконец, вам понадобится система для связи компонентов представления с посредниками.Проверьте https://github.com/robotlegs/robotlegs-framework/blob/master/src/org/robotlegs/base/MediatorMap.as, чтобы увидеть, как это делается в Robotlegs.

Я на самом деле собираюсь реализовать нечто подобное, так как я работаю над проектом, который является частью набора приложений PureMVC, но, честно говоря,если у вас нет выбора, я бы сказал, что проще всего использовать роботов!

0 голосов
/ 17 августа 2011

Могу ли я спросить вашу мотивацию для использования PureMVC?Я не хочу начинать священную войну здесь, но одна из причин создания фреймворков второго поколения (Mate, Swiz, Robotlegs, Parsely) была из-за нелепой сложности с началом работы с архитектурой приложений RIA.

Не расстраивайтесь, у новых фреймворков есть документация, поэтому легко понять и выяснить мотивацию для всех компонентов, парадигм и действующих лиц, которые вступают в игру.

...