Несколько активных экранов в чистом MVC, как управлять уведомлениями для конкретного экрана?
PURE MVC -
В моем приложении есть несколько экранов, которые свернуты, как на рабочем столе Windows. Теперь у каждого есть разные экземпляры медиатора, которые имеют одинаковое уведомление. Поэтому, если я внесу изменения на одном экране, скажем, нажмите некоторую кнопку >>, которая отправит некоторую команду >> на прокси >>, тогда прокси отправит уведомления посреднику.
Но поскольку там активно несколько экранов, на всех экранах отображаются изменения, так как они также уведомляются прокси-серверами.
Как убедиться, что прокси-сервер вызывает определенный компонент представления (медиатор), а не все живые экземпляры медиаторов?
2 ответа
Вы задали вопрос так: вы нажимаете кнопку на одном из экранов и хотите обновить это представление. Что должно произойти, так это то, что представление должно отправить событие посреднику. Только если вам нужна бизнес-логика или данные от прокси, вы должны отправлять уведомления на командный уровень. Вы говорите, что уведомляете прокси, что заставляет меня думать, что вам нужны свежие данные от прокси, то есть вы запрашиваете новые данные из бэкэнда. Когда новые данные извлекаются, он отправляет уведомление посреднику, чтобы обновить представление свежими данными. Остальная часть приложения должна обновиться, если данные изменились.
Если не все посредники заботятся об этих данных, то вам, вероятно, следует создать подкласс посредника для ваших разных окон и переопределить метод execute.
В структуре 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;
}
}
здесь синглтон относится к выбранному объекту