在Meteor v0.8.2中,似乎必须为动态模板调用的各个模板(Template.story_en
,Template.story_ne
)创建帮助程序。
是否可以仅为动态模板(Template.story
)创建帮助程序,并避免为动态模板可以使用的所有可能模板重复它,例如下面的示例?看来,我使用的方法需要大量重复的代码。
story.html
<template name="story">
{{> UI.dynamic template=storyTemplate}}
</template>
story.js
Template.story.storyTemplate = function() {
return "story_" + Session.get('lang')
}
// This does not work
Template.story.color = function() {
return '#f00'
}
// This works
Template.story_en.color = function() {
return '#f00'
}
// This works (but seems to be unnecessary code)
Template.story_ne.color = function() {
return '#f00'
}
答案 0 :(得分:1)
您可以使用全局帮助程序,或将帮助程序作为数据传递
使用全球助手(适用于您拥有的每个模板)
UI.registerHelper("color", function() {
return '#f00'
});
或者将帮助程序作为数据传递(在当前版本的铁路由器 - open bug下无效)。
Template.story.helpers({
dataHelpers: function() {
var data = UI._templateInstance().data || {};
//Add the helpers onto the existing data (if any)
_(data).extend({
color: function() {
return "#f00";
}
});
return data;
});
});
然后是html:
<template name="story">
{{> UI.dynamic template=storyTemplate data=dataHelpers}}
</template>
然后在子模板中,您可以使用{{color}}
而不需要帮助程序。
如果您遇到铁路由器问题,也可以尝试使用this
代替UI._remplateInstance.data
。