Несколько активных экранов в чистом MVC, как управлять уведомлениями для конкретного экрана? - PullRequest
1 голос
/ 19 декабря 2011

PURE MVC -

В моем приложении есть несколько экранов, которые свернуты, как на рабочем столе Windows. Теперь у каждого есть разные экземпляры медиатора, которые имеют одинаковое уведомление. Поэтому, если я внесу изменения на одном экране, скажем, нажмите некоторую кнопку >>, которая отправит некоторую команду >> на прокси >>, тогда прокси отправит уведомления посреднику.

Но поскольку там активны несколько экранов, на всех экранах отображаются изменения, так как они также уведомляются прокси.

Как сделать так, чтобы прокси вызывал определенный компонент представления (посредник), а не для всех живых экземпляров посредников?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2015

То, как вы сформулировали вопрос, заключается в том, что вы нажимаете кнопку на одном из экранов и хотите обновить это представление.Что должно произойти, так это то, что представление должно отправить событие посреднику.Отправлять уведомление на уровень команд можно только в том случае, если вам нужна бизнес-логика или данные от прокси-сервера.Вы говорите, что уведомляете прокси, что заставляет меня поверить, что вам нужны свежие данные от прокси, т.е. вы запрашиваете новые данные из бэкэнда.Когда новые данные извлекаются, он отправляет уведомление посреднику, чтобы обновить представление свежими данными.Остальная часть приложения должна обновиться, если данные изменились.

Если не все посредники заботятся об этих данных, то вам, вероятно, следует создать подкласс посредника для ваших разных окон и переопределить метод execute.

0 голосов
/ 20 декабря 2011

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

  • назначить выбранный компонент переменной singleton во время нажатия кнопки
  • проверьте идентификатор в функции handleNotification в посреднике, как показано ниже

Пример:

    public static const ADD_BOLD_STYLE:String = "AddBoldStyle";

    public function TextElementMediator(objViewComponent:Object)
    {
        super(NAME, objViewComponent);
        _objTextData = objTextData; 
    }

    public function get textElement():TextElement
    {
        return viewComponent as TextElement;
    }

    override public function listNotificationInterests():Array
    {
        return [ADD_BOLD_STYLE];
    }

    override public function handleNotification(notification:INotification):void
    {
        switch(notification.getName())
        {               
            case ADD_BOLD_STYLE:
                if(textelement == singleton.selectedObject)
                {
                    //Process your data
                }
                break;
        }
    }

здесь синглтон относится к выбранному объекту

...