2014-08-27 5 views
5

У меня есть один общий {{> yield}} для железа-маршрутизатора в файле макета, который отображает мои страницы, которые являются шаблонами.Множественный доход в шаблоне приложения Meteor.js

На одной из моих страниц у меня есть боковое меню, и в соответствии с выбором в этом меню я хочу загрузить различные шаблоны, связанные с этой страницей на этой странице.

Как я могу это достичь?

+0

Ссылка на принятый ответ: https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#layouts – kontur

ответ

11

Я сделал аналогичную вещь, используя опцию layout template утюга-маршрутизатора. Предположим, что я хочу создать домашний вид с несколькими видами/шаблонами внутри этого домашнего вида, который изменится. Во-первых, я бы объявить мой маршрут:

Router.map(function() { 
    this.route('home', { 
    path: '/', 
    template: 'myHomeTemplate', 
    layoutTemplate: 'layout', 
    yieldTemplates: { 
    'myAsideTemplate': {to: 'aside'}, 
    'myFooter': {to: 'footer'} 
    } 
    }); 
}); 

Где HTML для шаблона макета будет выглядеть следующим образом:

<template name="layout"> 
    <aside> 
    {{> yield region='aside'}} 
    </aside> 

    <div> 
    {{> yield}} 
    </div> 

    <footer> 
    {{> yield region='footer'}} 
    </footer> 
</template> 

Так что шаблоны, указанные в выходах aside и footer получить оказанной в указанном месте. Для вашего случая вы можете указать выход sidemenu.

Нет, что у вас есть основной макет и идея, вы можете определить другой маршрут. Скажем, мы называем это differentHome.

Router.map(function() { 
    this.route('differentHome', { 
    path: '/differentHome', 
    template: 'myHomeTemplate', 
    layoutTemplate: 'layout', 
    yieldTemplates: { 
    'myDifferentAsideTemplate': {to: 'aside'}, 
    'myDifferentFooter': {to: 'footer'} 
    } 
    }); 
}); 

Уведомление по этому маршруту декларации я меняюсь шаблоны урожая, но я не изменяя основной шаблон, который будет показан в основной выход. Теперь о событии вы можете изменить маршрут, который изменит два различных Урожайность шаблоны:

Router.go("differentHome"); 

Или вы можете использовать HTML для маршрутизации, скажем, со ссылкой.

EDIT (Хапхазард Solution):

Использование Session Variable продиктовать выбор Side Menu.

HTML: 
<template name="main"> 
    ...... 
    <div class="sideMenu"> 
    {{#if sideMenu1}} 
     {{> side1Template}} 
    {{/if}} 

    {{#if sideMenu2}} 
     {{> side2Template}} 
    {{/if}} 
    </div> 
</template> 

JS: 
Template.main.helpers({ 
    sideMenu1 : function() { 
     return Session.equals("sideMenuChoice", "sideMenu1") 
    }, 
    sideMenu2 : function() { 
     return Session.equals("sideMenuChoice", "sideMenu2") 
    } 
}); 

Теперь на мероприятии установлено сеанс, на котором когда-либо была сторонаMenuChoice.

+0

Как изменить значения yieldTemplates, щелкнув элемент списка вместо их назначения в маршрутизаторе. – user2858924

+0

Вы можете использовать случайную реализацию с переменными сеанса, которые определяют Боковое меню даже вне маршрутов Iron-router. Это было бы не очень аккуратное решение, но вы могли бы заставить его работать. См. EDIT выше. – Nate

+2

Обратите внимание, что вы можете определить 'yield' в своем шаблоне, который вы оставите неиспользуемым для некоторых маршрутов, что может оказаться очень удобным. – kontur