ОБНОВЛЕНО НИЖЕ:
Я работал, что я думаю, что это довольно эффективный и эффективный способ сделать это.
При рассмотрении функциональности Flow-маршрутизатор, я заметил, что объект маршрутизатор включает в себя поле, которое содержит все параметры группы, в FlowRouter.current().route.group.options
Этот объект содержит любую пару ключ-значение, определенное в группе, независимо от того, они используются API Flow-Router или нет.
Тогда я решил использовать это как простой способ передачи некоторых шаблонов по умолчанию из группы в маршрутизатор.
первых, это определение группы:
var mainRoutes = FlowRouter.group({
name: "mainRoutes",
defaultTemplates: {
menu: "mainMenu",
breadcrumb: "mainCrumb",
sidebarLeft: "sidebarLeft",
sidebarRight: "sidebarRight",
footer: "mainFooter"
}
});
Тогда при определении маршрута мы можем получить доступ к этим из this.group.options.defaultTemplates
mainAppRoutes.route('/', {
name: "home",
action: function() {
// Get the defaultTemplates object
var templates = this.group.options.defaultTemplates;
// Add route specific templates
templates.content = "homeScreen";
// Pass all the templates to the renderer
BlazeLayout.render("appLayoutMain", templates);
}
});
Мне нравится этот шаблон, потому что он использует существующие возможности Flow-маршрутизатора и одна дополнительная строка кода в маршруте, позволяющая определять стандартные шаблоны по умолчанию. Это, по сути, имитирует, как Iron-Router использовал шаблоны по умолчанию в Router.config()
, с дополнительным преимуществом определения шаблонов локального маршрута, не переписывая весь объект шаблона по умолчанию.
- UPDATE выше работает хорошо для меня, хотя я в конечном итоге having another problem, который я должен был решить, чтобы заставить его работать последовательно.
По существу, если вы измените любые основные «маршрут по умолчанию», как мы делаем, в локальной route.action
функции, так как Flow-маршрутизатор не является реактивным, объект маршрутизатора группы, похоже, сохранится от маршрута к маршруту, как долго поскольку маршруты находятся в одной группе. Также этот объект «options» передается маршрутизатору из определения маршрута. Так что это означает, что если вы переопределите параметр по умолчанию в приведенном выше случае, он будет перезаписан для всех последующих маршрутов с использованием той же самой группы после того, как будет вызван маршрут, который переопределяет его.
Решение, с которым я столкнулся, состояло в том, чтобы выполнить функцию сброса по умолчанию: triggersExit: [ resetDefaults ]
в определении группы.
Тогда просто выполните сброс значений по умолчанию. Причина, почему я сделал это на выходе так, что следующий маршрут называют еще можно переопределить локально эти значения по умолчанию:
function resetDefaults (context) {
context.route.group.options.defaultLayoutTemplate = "mainAppLayout";
context.route.group.options.defaultTemplates = {
defaultTeamplates: "navMain",
// ...
};
В качестве короткой заметки для доступа к родительскому элементу в вложенных шаблонах вы можете получить доступ к родительскому элементу вложенной группы через 'FlowRouter.current(). Group.parent.options.defaultTemplates' – robertdavid