#backbone.js #marionette
#backbone.js #марионетка
Вопрос:
У нас есть приложение для марионеток (2.4.4).
В настоящее время он содержит множество областей верхнего уровня (заголовок, навигация, содержимое и т. Д.).
Теперь мне нужно добавить несколько страниц, которые не используют эти регионы. Я мог бы подключить загрузку событий, чтобы проверить, когда отображаются определенные страницы, а затем скрыть / показать регионы, но мне было интересно, есть ли простой способ определить несколько макетов приложений, а затем указать маршруты, которые определяют, какой макет загружать?
Таким образом, макет A будет иметь заголовок, навигацию, содержимое, а макет B будет иметь только заголовок и содержимое.
Тогда некоторые маршруты используют A, а некоторые маршруты используют B?
Ответ №1:
ДА. В версии v2.x приложение имеет несколько регионов.. и поэтому я подозреваю, что ваши регионы верхнего уровня определены в приложении.. в версии v3 приложение теперь имеет только один регион..
Я бы предложил изменить ваше приложение таким образом, чтобы в нем была одна область приложения.. и поместите свои макеты верхнего уровня внутри него, вместо того, чтобы использовать ваше приложение в качестве макета.
Таким образом, вы можете менять макеты по мере необходимости в соответствии с маршрутом, и вы на пути к возможности обновления.
Комментарии:
1.ах, хорошо .. В тот момент, когда контроллер для вспомогательного модуля хочет показать его вид, он называет
App.main.show(View);
main
его основной областью содержимого. Итак, если у нас есть 2 верхних уровняLayoutViews
, мы создадим их экземпляры, а затем сделаем их доступными для контроллеров? И тогда контроллер каким-то образом покажет один из макетов, а затем покажет его основной вид внутри него? Меня беспокоит повторный рендеринг / потеря состояния элементов навигации в одном из макетов, если каждый вспомогательный модуль повторно загружает макет верхнего уровня, если это имеет смысл…2. Я бы предложил сохранить состояние извне из представления, чтобы вы могли его перестроить. Но, по сути, было бы
App.main.show(new MainLayout({ state: storedState }));
меньшим вариантом сохранитьpreventDestroy
макет из основного региона нетронутым .. но это, конечно, не идеально. В этом сценарии..main
это будет единственная область в приложении.. и любые другие регионы будут частью этого.