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

How to call a template helper from within the same file?

我有以下辅助函数:

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();

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

这取决于你想在哪里调用函数。如果它在同一个文件中的其他地方(另一个不在关闭范围内),那么预先定义它:

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

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

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

第二种情况是递归调用,需要一个停止条件。因为它就写在那里,所以最终会出现 InternalError : too much recursion thingy。

如果您设法呼叫助手 "manually",那将不会轻松或漂亮。你想要做的是声明一个常规函数,它可以被助手和你的其他代码使用,例如:

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 声明的 "globally" 实际上只在其文件中可见,因此您无需担心污染全局命名空间。如果您需要为 "helper" 函数提供特定的上下文,您可以使用 callapply 而不是常规调用来实现。