从Meteor 0.9.4开始,定义模板。 MyTemplate 。 MyHelperFunction ()不再有效。
我们弃用了Template.someTemplate.myHelper = ...语法,转而使用Template.someTemplate.helpers(...)。使用旧语法仍然有效,但它会向控制台输出弃用警告。
这对我来说似乎很好,因为它会(至少)保存一些错误输入和重复的文本。但是,我很快发现我构建Meteor应用程序的方式倾向于这个新版本已弃用的功能。在我的应用程序中,我使用旧语法定义了助手/函数,然后从其他助手调用这些方法。我发现它帮助我保持代码清洁和一致。
例如,我可能有这样的控件:
//Common Method
Template.myTemplate.doCommonThing = function()
{
/* Commonly used method is defined here */
}
//Other Methods
Template.myTemplate.otherThing1 = function()
{
/* Do proprietary thing here */
Template.myTemplate.doCommonThing();
}
Template.myTemplate.otherThing2 = function()
{
/* Do proprietary thing here */
Template.myTemplate.doCommonThing();
}
但这似乎不适用于Meteor建议的新方法(这让我觉得我一直都错了)。我的问题是,在模板助手之间分享常见的,特定于模板的逻辑的首选方法是什么?
答案 0 :(得分:3)
很抱歉,如果我很无聊,但你不能将该功能声明为对象并将其分配给多个助手吗?例如:
// Common methods
doCommonThing = function(instance) // don't use *var* so that it becomes a global
{
/* Commonly used method is defined here */
}
Template.myTemplate.helpers({
otherThing1: function() {
var _instance = this; // assign original instance *this* to local variable for later use
/* Do proprietary thing here */
doCommonThing(_instance); // call the common function, while passing in the current template instance
},
otherThing2: function() {
var _instance = this;
/* Do some other proprietary thing here */
doCommonThing(_instance);
}
});
顺便说一句,如果你发现你经常在多个模板中复制相同的帮助者,那么使用Template.registerHelper
代替将相同的函数分配给多个地方可能会有所帮助。