如何定义全局模板帮助函数?

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是数据驱动的,我会记住的。谢谢!

以上是关于如何定义全局模板帮助函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在流星模板中创建全局函数

Django学习之全局变量

vue教程3-03 vue组件,定义全局局部组件,配合模板,动态组件

python 中怎么对一个全局的图变量在函数中进行值修改

团队合作-如何避免JS冲突

解释啥是全局变量,如何定义