В настоящее время я работаю над крупномасштабным Backbone-приложением (с использованием marionetteJS) и с некоторыми проблемами архитектуры с лучшими практиками/шаблонами, участвующими в переключении просмотров или изменении «страницы».Изменение «страницы» в MarionetteJS
Планы марионетки & регионов предоставляют некоторые действительно отличные инструменты для переключения вида, такие как .show()
и методы .empty()
. В приложении, над которым я работаю, я использовал представление макета в качестве контейнера всех других видов, и это позволяет мне переключать виды в и из, по существу, в приложении.
Thats easy. Трудная часть для меня - это понимание того, что лучше всего подходит для запуска этих изменений.
Вот некоторые из решений, я пришел с:
page:change:x
событие вызывается, когда пользователь нажимает на определенную часть щ (х означает вид, чтобы изменить). Контроллер, который управляет этим представлением, прослушивает это событие и показывает его в представлении основного макета приложения.Когда пользователь нажимает на ui, чтобы изменить страницу, представление запускает команду и передает в представление, которое она хотела бы изменить на ui, например
App.execute('page:change', view)
. Объект приложения прослушивает этот триггер и отображает представление, которое передается в представление основного макета приложения.
Проблема с первым методом является то, что контроллер должен знать о каждой странице в ее рамках (возможно это еще не плохо, я не знаю). Например: просмотр списка пользователей, просмотр-просмотр-просмотр пользователей, просмотр-просмотр-просмотр и т. Д. Это также делает код более сложным, поскольку отслеживать события происходит повсюду.
Проблема со вторым методом заключается в том, что текущее представление должно знать о представлении, которое приложение также изменит, что для меня не очень масштабируемо.
Есть ли какая-либо передовая практика для такого рода вещей?
EDIT:
я должен уточнить, что это проблема, связанная с навигацией вокруг в приложении. Не начальная загрузка с использованием маршрутизатора.
Дерик рекомендует [агрегатор события на уровне приложения] (http://lostechies.com/derickbailey/2012/ 04/03/revisiting-the-backbone-event-aggregator-lessons-learn /), который сказал, что этот вопрос не подходит для SO, и его лучше спросить у [программистов] (http: //programmers.stackexchange. ком). Голосование закрывается. – steveax
, когда я ссылаюсь на 'page: change: x' или' App.execute'. Я действительно говорю об агрегаторе событий уровня приложения, реализованном по умолчанию в marionettejs. – Tom