Несколько макетов приложений в Marionette

#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 это будет единственная область в приложении.. и любые другие регионы будут частью этого.