如何从同一文件中调用模板助手?
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 中,任何使用 var
或 function
声明的 "globally" 实际上只在其文件中可见,因此您无需担心污染全局命名空间。如果您需要为 "helper" 函数提供特定的上下文,您可以使用 call
或 apply
而不是常规调用来实现。
我有以下辅助函数:
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 中,任何使用 var
或 function
声明的 "globally" 实际上只在其文件中可见,因此您无需担心污染全局命名空间。如果您需要为 "helper" 函数提供特定的上下文,您可以使用 call
或 apply
而不是常规调用来实现。