Изменение представления, принадлежащего другому контроллеру - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть приложение, похожее на рабочий стол, которое имеет 2 контроллера: «Рабочий стол», который представляет значки на рабочем столе, и «Панель задач», которая представляет панель задач, на которой вы найдете кнопки, чтобы свернуть / восстановить уже открытые окна, как в MS Windows.

Проблема, с которой я сталкиваюсь в настоящее время, заключается в подходе «как мне отобразить окно». Фактически после двойного щелчка по значку я должен создать окно, и это может произойти как на контроллере рабочего стола, так и на контроллере панели задач (или, может быть, непосредственно в окне просмотра, поскольку их можно перетаскивать куда угодно). Однако, когда я создаю окно, на панели задач должна быть создана новая кнопка, чтобы минимизировать / восстановить его.

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

На данный момент у меня в голове 3 идеи:

  1. Контроллер рабочего стола напрямую добавляет кнопку в TaskbarView, но в этом случае я чувствую, что нарушаю паттерн MVC. Также мне нужно указать TaskbarView в видах рабочего стола.
  2. Контроллер рабочего стола после двойного щелчка значка запускает пользовательское событие на контроллере панели задач. В этом случае панель задач открывает окна и добавляет кнопку, этот подход довольно линейный , но Я не знаю как ссылаться на контроллер из другого контроллера (в данном случае из Рабочий стол на панель задач)
  3. Регистр Ext.Application для события itemdblclick на контроллере рабочего стола. Когда это событие вызывается, оно перенаправляет (или вызывает пользовательское событие) на контроллере панели задач. После этого все продолжается, как в пункте 2. Таким образом, я централизую функциональность маршрутизации (например, рельсы), однако может также случиться, что объект приложения станет действительно большим. Также я использую его как «гигантский контроллер» для маршрутизации всего, но на самом деле это не большая проблема, если подумать о рельсах, то это делает нечто подобное.
  4. Приложение не должно быть разделено на 2 контроллера (поэтому рабочий стол и панель задач должны быть по одному), и все будет хорошо. Я не думаю, что этот подход правильный.

Итак, мои вопросы:

  • Какой подход я должен использовать: 1,2,3,4 (или указать, есть ли что-то другое)?
  • К чему должно принадлежать окно: контроллер рабочего стола, контроллер панели задач, что-то еще?

Спасибо за любой ответ

1 Ответ

1 голос
/ 19 декабря 2011

У меня есть похожие настройки для вас.Лично я бы выбрал вариант 2. Есть несколько способов справиться с этим.Одним из них является наличие родителя, который содержит рабочий стол и панель задач в качестве своих дочерних элементов, и он может управлять связью между ними.Вы можете создавать пользовательские события, которые родитель прослушивает, и направлять их нужным дочерним элементам.

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

Можно также использовать шаблон проектирования Mediator в JavaScript для регистрации отправителей и слушателей.Таким образом, вы можете сообщить, что рабочий стол является отправителем событий щелчка значков, а панель задач - слушателем этих событий.Нажатие на значок отправит событие всем слушателям, установленным в медиаторе.Таким образом, вам не нужен родитель, чтобы управлять им.Но лично мне родитель больше нравится.

...