如何定义全局模板帮助函数?
Posted
技术标签:
【中文标题】如何定义全局模板帮助函数?【英文标题】:How Do I Define a Global Template Helper Function? 【发布时间】:2013-02-26 03:40:34 【问题描述】:在许多模板中我想使用相同的功能,但它们必须在每个模板中定义。 像这样:
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:
<Template name="navigation"> ... #each getNodesById '1' ... /each ... </Template> <Template name="body"> ... #each getNodesById '1' ... /each ... </Template> ... <Template name="..."> ..... </Template>
有什么方法可以定义全局模板函数而不是模板?就像它: 在javascript中:
已定义全局 tempele.functionA = function(...) 返回 ...在 html 中:
<Template name ="a"> #each functionA ... /each </Template> <Template name ="b"> #each functionA ... /each </Template> <Template name="..."> #.. functionA ... .... /... </Template >
我可以这样做吗?我希望我清楚地描述了这个问题。
【问题讨论】:
【参考方案1】:从 Meteor 1.0 开始,文档 here 指示开发人员使用 Template.registerHelper
来定义全局可用的模板助手。
所以在这个问题的情况下,正确的代码格式应该是这样的:
Template.registerHelper("getNodesById", function(id)
return collection.find(sid: id);
然后您可以通过以下两种方式在您的任何模板中引用此模板助手:
getNodesById '1'
或
#each getNodesById '1'
...
/each
【讨论】:
【参考方案2】:对于 Meteor 0.8 或更高版本,使用 UI.registerHelper
即可。
【讨论】:
【参考方案3】:您可以直接使用把手注册您的助手。这是我用来显示当前用户的电子邮件地址的:
Handlebars.registerHelper('currentUserName', function ()
var user = Meteor.user();
if (_.isUndefined(user) || _.isNull(user))
return new Handlebars.SafeString("<i class='icon-spin icon-spinner'></i> Login");
return user.emails[0].address;
);
在任何模板中,我只调用currentUserName
。对你来说就是
Handlebars.registerHelper('getNodeById', function (id)
return collection.find(sid:id).fetch();
);
附带说明:看看你想如何使用它,你可能对 Meteor 的想法有误。 Meteor 是数据驱动的——不要试图强制执行流驱动的范例。如果您的模板中缺少某些数据,您应该更改数据源,而不仅仅是在模板中获取它。
【讨论】:
谢谢你的提醒,我觉得我一开始就错了。Meteor是数据驱动的,我会记住的。谢谢!以上是关于如何定义全局模板帮助函数?的主要内容,如果未能解决你的问题,请参考以下文章