我正在尝试在动态模板中渲染动态模板。
主要布局:
<template name="template1">
{{>navbar}}
<div class="container">
{{>Template.dynamic template=content}}
</div>
</template>
子模板:
<template name="template2">
<div class="container">
<div class="row">
<h2>Data Input</h2>
</div>
<div class="row">
<ul class="nav nav-pills">
<li class="active"><a href="/input/inc">Inc</a></li>
<li><a href="/input/exp">Exp</a></li>
</ul>
</div>
<div class="row">
{{>Template.dynamic template=dataSection}}
</div>
</div>
子子模板:
<template name="template3">
<h2>Inc</h2>
</template>
下面是我的FlowRouter代码。这是错的,但我认为这可能会让某人知道我想要做什么。 FlowRouter:
FlowRouter.route('/input/income', {
action: function () {
BlazeLayout.render("template1", {
content: "template2"
});
BlazeLayout.render("template2", {
dataSection: "template3"
});
}
});
我正在尝试在template1内部渲染template2,之后我想在模板2中渲染模板3.我是否必须以某种方式在模板2中渲染模板3才能在模板2中渲染模板模板1?
答案 0 :(得分:4)
您需要使用帮助器渲染子模板。将您的路由器代码更改为:
action: function () {
BlazeLayout.render("template1", {
content: "template2"
});
}
您只需要一次渲染调用,因为template2将自动渲染给定的动态模板。现在在template2中创建帮助程序:
Template.template2.helpers({
dataSection() {
return "template3";
}
});
如果需要,可以使用不同的逻辑替换return语句,只要它返回模板的名称即可。
答案 1 :(得分:2)
您也可以在没有模板助手的情况下执行此操作:
BlazeLayout.render('App_Body', {main: 'parent', sub: 'details' });
主模板的HTML
<template name="App_body">
{{> Template.dynamic template=main}}
</template>
父模板的HTML
<template name="parent">
Parent template
{{> Template.dynamic template=sub}}
</template>
子模板的HTML
<template name="details">
Sub template
</template>
与路线的深层链接变得更加容易:
FlowRouter.route('/todos/show/:id', {
name: 'Todo.show',
action(params, queryParams) {
BlazeLayout.render('App_body', {main: 'parent', sub: 'details' });
}
});
然后在详细信息模板JS部分中,您可以获得id:
Template.todo.onCreated(function todoOnCreated() {
var id = FlowRouter.getParam('id');
// ...
});