在许多模板中我想使用相同的函数,但它们必须在每个模板中定义。像这样:
function getNodesById(id){
return collection.find({sid:id}).fetch();
}
Template.navigation.getNodesById= function(id){
return getNodesById(id);
}
Template.body.getNodesById= function(id){
return getNodesById(id);
}
HTML:
...
{{#each getNodesById '1'}}
...
{{/each}}
...
...
{{#each getNodesById '1'}}
...
{{/each}}
...
...
.....
有什么方法可以定义全局模板函数而不是模板?就像它:在 JavaScript 中:
defined global tempele.functionA = function(...){ return ... }
在 html 中:
{{#each functionA ...}}
{{/each }}
{{#each functionA ...}}
{{/each }}
{{ #.. functionA ...}}
....
{{/...}}
我可以这样做吗?我希望我把问题描述清楚了。
您可以直接使用 handlebars 注册您的助手。这是我用来显示当前用户的电子邮件地址的内容:
Handlebars.registerHelper('currentUserName', function () {
var user = Meteor.user();
if (_.isUndefined(user) || _.isNull(user)) {
return new Handlebars.SafeString(" Login");
}
return user.emails[0].address;
});
在任何模板中,我只需调用 {{currentUserName}}
。对你来说就是
Handlebars.registerHelper('getNodeById', function (id) {
return collection.find({sid:id}).fetch();
});
附带说明:看看您想要如何使用它,您可能会误解 Meteor。 Meteor 是数据驱动的——不要试图强制执行流驱动的范例。如果您的模板中缺少某些数据,您应该更改数据源,而不仅仅是在模板中获取它。
Tôi là một lập trình viên xuất sắc, rất giỏi!