0

在我的 Meteor 项目中,我有几个类似的辅助函数

helpers.js

var tagStr = function () { return this.tags.join(', '); };

文章.js

Template.articles.tags = tagStr;

列表.js

Template.listing.tags = tagStr;

现在,我可以在articles.js 或listing.js 中定义函数,但在另一个中不起作用。或者我可以在 helpers.js 中定义它,它不会在任何一个..

那么,我将如何在其他脚本之前加载我的辅助函数呢?最好以“正确的方式”。

谢谢!

4

2 回答 2

4

我认为您正在寻找的是全球可用的车把助手-我将我的保存在 client/lib/handlebars.js 中-“lib”文件夹的内容将首先加载

像这样定义每个助手:

Handlebars.registerHelper("joinArray", function(array) {
  if(array)
    return array.join(', ');
});

然后,您将在任何模板 html 文件中使用它,如下所示:

{{joinArray tags}}

您可以在此处阅读有关车把助手的更多信息 handlebarsjs.com/block_helpers.html


这是IMO的“正确”方式,但是如果您想使用普通的javascript函数而不是车把助手,那也可以


您需要将常用的 javascript 函数放在诸如 client/lib/helpers.js 之类的文件中,并且不要使用 'var' 声明前缀

像这样:

thisIsAGloballyAvailableFunction = function(){...};

不喜欢:

var thisFunctionIsOnlyAvailableInThisFile = function(){...};

流星做了一件有点奇怪的事情来控制范围。任何带有 'var' 的东西在它出现的文件的范围内都是本地的,任何声明没有 'var' 的东西在整个应用程序中都是全局可用的

于 2013-07-16T23:35:27.733 回答
1

nate-strauser 的回答是正确的,并帮助我找到了正确的解决方案,但现在(Meteor 1.0)Handlebars.registerhelper()已被弃用。

现在它以这种方式工作(如果有人仍然感兴趣):

Template.registerHelper()

其余由 nate-strauser 解释。

于 2014-11-25T16:11:39.200 回答