2014-08-27 47 views
5

我在布局文件中为铁路由器提供了一个通用{{> yield}},该布局文件呈现我的页面,它们是模板。Meteor.js应用程序模板中的多重收益

在我的一个页面中,我有一个侧面菜单,根据此菜单中的选择,我想在此页面中加载与此页面相关的不同模板。

我该如何做到这一点?

+0

接受答案的参考是https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#layouts – kontur 2015-02-17 08:26:25

回答

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> 

因此,在产量asidefooter指定的模板在指定点得到呈现。对于您的情况,您可以指定一个sidemenu收益率。

没有,你有基本的布局和想法,你可以定义另一条路线。假设我们称之为differentHome

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

关于此路由声明的通知我正在更改yield模板,但我没有更改将在主yield中呈现的基本模板。现在,在一个事件,你可以重新布线,这将改变两个不同的收益率模板:

Router.go("differentHome"); 

或者你可以使用HTML路由,说有一个链接。

EDIT(杂乱无章解决方案):

使用会话变量支配侧面菜单选择。

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") 
    } 
}); 

现在在一个事件中设置了Session到了哪个方面MenuChoice。

+0

如何通过单击列表项来更改yieldTemplates值而不是分配它们在路由器中。 – user2858924 2014-08-28 11:21:08

+0

即使在铁路由器路由之外,您也可以使用会话变量的随意实现来指定侧面菜单。这不会是一个非常整洁的解决方案,但你可以让它工作。见上面的编辑。 – Nate 2014-08-28 20:25:05

+2

请注意,您可以在您的模板中定义“yield”,这样您可以不使用某些路线,这样可以超级方便。 – kontur 2015-02-17 10:01:09