我有以下辅助函数:
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();
它没有用,所以我该如何使用这个功能?
答案 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中,任何使用var
或function
声明为“全局”的内容实际上只能在其文件中可见,因此您无需担心污染全局命名空间。如果您需要为“帮助程序”功能提供特定的上下文,则可以使用call
或apply
而不是常规调用来执行此操作。
答案 1 :(得分:0)
这取决于您想要调用该函数的位置。如果它在同一个文件中的其他地方(另一个范围之外),则事先定义它:
function permalinkHelper() {/* ... */ }
如果您需要在自身内部访问它,请命名该函数并使用此名称:
Template.modal.helpers({
permalink : function permalinkHelper() {
permalinkHelper();
}
});
第二种情况是递归调用,需要停止条件。正如它写在那里它将最终出现在一个内部错误:太多递归的东西。