我在布局文件中为铁路由器提供了一个通用{{> yield}},该布局文件呈现我的页面,它们是模板。Meteor.js应用程序模板中的多重收益
在我的一个页面中,我有一个侧面菜单,根据此菜单中的选择,我想在此页面中加载与此页面相关的不同模板。
我该如何做到这一点?
我在布局文件中为铁路由器提供了一个通用{{> yield}},该布局文件呈现我的页面,它们是模板。Meteor.js应用程序模板中的多重收益
在我的一个页面中,我有一个侧面菜单,根据此菜单中的选择,我想在此页面中加载与此页面相关的不同模板。
我该如何做到这一点?
我用铁路由器的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'}
}
});
});
关于此路由声明的通知我正在更改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。
如何通过单击列表项来更改yieldTemplates值而不是分配它们在路由器中。 – user2858924 2014-08-28 11:21:08
即使在铁路由器路由之外,您也可以使用会话变量的随意实现来指定侧面菜单。这不会是一个非常整洁的解决方案,但你可以让它工作。见上面的编辑。 – Nate 2014-08-28 20:25:05
请注意,您可以在您的模板中定义“yield”,这样您可以不使用某些路线,这样可以超级方便。 – kontur 2015-02-17 10:01:09
接受答案的参考是https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#layouts – kontur 2015-02-17 08:26:25