如何从同一个文件中调用模板助手?

时间:2015-09-11 10:34:14

标签: javascript meteor meteor-helper

我有以下辅助函数:

Template.modal.helpers({ 
  permalink: function() {
    var this_id = Session.get("pageId");
    var thisItem = Items.findOne({_id: this_id});
    // console.log("set page id to " + this._id)
    return thisItem['permalink'];
  }
});

我想在同一个文件中调用它,我试过

permalink();
this.permalink();

它没有用,所以我该如何使用这个功能?

2 个答案:

答案 0 :(得分:1)

如果你设法“手动”调用助手,那将不容易或漂亮。你想要做的是声明一个常规函数,助手和你的其他代码都可以使用它,例如:

function myPermalinkFunction() {
  var this_id = Session.get("pageId");
  var thisItem = Items.findOne({_id: this_id});
  // console.log("set page id to " + this._id)
  return thisItem['permalink'];
}

Template.modal.helpers({
  permalink: myPermalinkFunction
});

/* elsewhere, within the same file */
  ... myPermalinkFunction() ...

在Meteor中,任何使用varfunction声明为“全局”的内容实际上只能在其文件中可见,因此您无需担心污染全局命名空间。如果您需要为“帮助程序”功能提供特定的上下文,则可以使用callapply而不是常规调用来执行此操作。

答案 1 :(得分:0)

这取决于您想要调用该函数的位置。如果它在同一个文件中的其他地方(另一个范围之外),则事先定义它:

function permalinkHelper() {/* ... */ }

如果您需要在自身内部访问它,请命名该函数并使用此名称:

Template.modal.helpers({
  permalink : function permalinkHelper() {
    permalinkHelper();
  }
});

第二种情况是递归调用,需要停止条件。正如它写在那里它将最终出现在一个内部错误:太多递归的东西。