从Meteor 0.9.4开始,定义Template.MyTemplate.MyHelperFunction()不再有效。



这对我来说似乎很好,因为它(至少)可以节省一些打字错误和重复的文本。但是,我很快发现我构建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建议的新方法(这使我认为我一直都错了)。我的问题是,在模板助手之间共享常见的,特定于模板的逻辑的首选方法是什么?

最佳答案

抱歉,如果我很沉闷,但是您不能将函数声明为对象并将其分配给多个助手吗?例如:

// 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而不是将相同的功能分配给多个位置可能会有所帮助。

关于javascript - 在模板的上下文中( meteor 0.9.4)从另一个助手中调用一个助手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26414985/

10-13 01:41