在我的Meteor项目中,我有几个排序的辅助函数
helpers.js
var tagStr = function () { return this.tags.join(', '); };
articles.js
Template.articles.tags = tagStr;
listing.js
Template.listing.tags = tagStr;
现在,我可以在articles.js或listing.js中定义该函数,但在另一个函数中它不起作用。或者我可以在helpers.js中定义它,它既不会工作..
那么,如何在其余脚本之前加载我的辅助函数呢?最好以“正确的方式”。
谢谢!
答案 0 :(得分: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(){...};
meteor控制范围确实有点奇怪。任何带有'var'的东西都是它出现的文件范围的本地,任何声明没有'var'的东西在整个应用程序中是全局可用的
答案 1 :(得分:1)
nate-strauser的答案是正确的,并帮助我找到了正确的解决方案,但现在(Meteor 1.0)Handlebars.registerhelper()
已被弃用。
现在它以这种方式工作(如果有人仍然感兴趣):
Template.registerHelper()
其余的由nate-strauser解释。