Краткий контекст: Представление приложения имеет 2 выхода. Один для панели инструментов. Другой для маршрутизируемой «основной» иерархии представлений.
app -- main
\-- toolbar
Мне нужны некоторые кнопки на панели инструментов для запуска событий в «основном» представлении. Не обновлять данные в любой модели. Я просто даю ему указание инициировать некоторые изменения в библиотеке чертежей, которую представляет вид. Очистка холста, сброс значения масштабирования и тому подобное.
В 1.0 pre2 и более ранних версиях я использовал действия и router.get('someController.view'), чтобы получить доступ к нужному мне представлению и запустить действие/метод/событие. Вряд ли вершина дизайна приложения, но он работал нормально.
Этой опции больше нет, и я не могу найти хорошую альтернативу. Какой механизм следует использовать для связи между представлениями, которые не находятся в дочерней/родительской иерархии? Все, что я придумал, неуклюже и вызывает у меня ощущение, что "У Ember есть способ получше"< /эм>.
Короче хочу:
- Кнопка на панели инструментов для запуска события
- Основное представление реагирует на это и выполняет некоторые обновления своих частей.
- Основное представление НЕ перерисовывать в Ember смысле этого слова, как через маршрутизацию. Он использует библиотеку для рисования, и интеграция всех его свойств и поведения в модели и контроллеры Ember не доставит большого удовольствия.
- Панель инструментов и основной вид имеют общий родительский вид, но находятся в разных «ветвях».
Плохие варианты, которые я рассматриваю:
Панель инструментов в значительной степени относится к уровню приложения, но на ней есть несколько кнопок, которые должны указывать определенные представления. Один из вариантов, который я вижу в Ember, — это вложить панель инструментов в «основной» вид. Это кажется неправильным для некоторых других функций.
Коммуникация может быть обработана контроллером (и, возможно, даже моделью), который будет содержать свойства, которые устанавливает панель инструментов, а представление «прослушивания» реагирует на и сбрасывает значение. Это звучит как злоупотребление целями контроллера и модели и как довольно плохая настройка прослушивателя событий.
Я мог бы сделать библиотеку рисования глобальным приложением как App.Drawing или что-то в этом роде, но это тоже кажется плохим. Это также будет означать, что действия по-прежнему не смогут использовать какие-либо данные в виде для обновления библиотеки чертежей.
Какие-либо предложения?