我开始在我的Meteor应用程序中使用Iron Router,并使用yields
进行模板化。
我最近遇到了一个问题,我无法用上下文启动命名的yield,如下所示:
{{#with context}}
{{yield 'subtemplate'}}
{{/with}}
并收到此错误Sorry, couldn't find a yield named "subtemplate". Did you define it in one of the rendered templates like this: {{yield "subtemplate"}}?
如果我删除{{#with}}
块表达式,我可以渲染产量。
有没有人知道将上下文传递给命名的yield的好方法?
我已在iron-router
github项目中将我的问题发布为an issue,但尚未获得任何解决方案。
感谢任何帮助。
2014年1月1日编辑: 所以我的代码看起来像这样:
// main template for the route
<div class="form-container">
<div class="form">
{{yield 'section'}}
</div>
</div>
获得yield部分显示的逻辑
// router.js
ApplyController = RouteController.extend({
before: function() {
var section = this.params.section || 'personal-info';
Session.set('current', section);
},
action: function() {
var section = Session.get('current');
this.render();
this.render(section, {
to: 'section'
});
},
data: function() {
return {
app: Applications.findOne({user: Meteor.userId()})
}
}
});
其中一个部分模板的示例:
<template name="education">
{{#with app}}
<form id="education" name="education" class="fragment" method="post" action="">
<h2>Education</h2>
<div class="form-group">
<label for="college" class="control-label">College/ University</label>
<select class="form-control" id="college" name="college" placeholder="Select a College/ University">
<option value="">Select a College/ University</option>
{{#each colleges}}
<option value="{{slug}}" {{selected slug ../college}}>{{name}}</option>
{{/each}}
</select>
</div>
<!-- other content here -->
</form>
{{/with}}
</template>
使用{{#with app}}
块是我目前解决这个问题的方法,但因为我有10个不同的部分模板,所以我必须把它放在所有部分模板中。
答案 0 :(得分:1)
使用ironrouter在路由器中传递数据上下文。你不能以这种方式传递它,因为如果你在路由器中传递路由,它将覆盖路由的数据上下文。
然而它可能适用于IronRouter的shark分支,它基于Meteor UI,因为它使用{{>yield}}
代替{{yield}}
。
你可以使用它:
Router.map(function() {
this.route('template', data: function() { return Something.find() });
});
您基本上使用data
参数传递上下文。这样做可能比使用{{#with context}}
更容易,因为您可以使用更多动态数据,这些数据对于每条路线都是不同的。
你可能已经尝试过了,我有点不确定它是否会转到命名的yield模板。
Template.templateInYieldName.helper = function() {
return Something.find();
}
然后,您可以在命名的收益率中使用{{helper.name}}
之类的内容。
如果您打算对所有路线使用数据,则可以使用Handlebars全局帮助程序。即
Handlebars.registerHelper('todaysDate', function() {
return (new Date).toString();
});
然后在您的任何模板中使用{{todaysDate}}
。您可以使用您的数据而不是日期。