在Meteor中模板之间共享功能

Sam*_*amo 15 meteor

如果我有两个想要检查相同功能的返回值的车把模板怎么办?有没有正确的方法来做到这一点?显然我可以这样做:

var say_foo = function() {
  alert('foo');
};

Template.foo.say_foo = say_foo;
Template.bar.say_foo = say_foo;
Run Code Online (Sandbox Code Playgroud)

但有没有办法通过Template对象直接执行此操作?由于这是JavaScript,我可以为任何对象的任何属性分配一个函数,但我尝试过:

Template.say_foo = function() { alert('foo'); };
Run Code Online (Sandbox Code Playgroud)

当然模板找不到这个功能.

只是对最佳实践等感到好奇.谢谢!

小智 17

我认为会有更好的版本(如果您使用Handlebars,这是默认设置):

Template.registerHelper('my_helper', function() {
     // code
});
Run Code Online (Sandbox Code Playgroud)

您可以使用{{my_helper}}从任何模板中调用此内容!

希望能帮助到你 :)

  • @srinivas:在Meteor的历史中,"正确的方式"发生了变化,它是Handlebars,然后是UI,现在是模板.应编辑原始过时的答案,而不是发布创建难以阅读的列表的新答案.我已经相应地更新了这个,因为这是第一个也是最受欢迎的 (2认同)

sri*_*vas 16

根据Meteor文档,正确的方法是使用UI命名空间,它将绑定到下面使用的任何模板引擎,而不是直接使用Handlebars或spacebars.这是文档中的链接.http://docs.meteor.com/#ui_registerhelper

因此,要从client.js中的任何模板使用访问泛型函数:

UI.registerHelper('stub', function() {
     // code
});
Run Code Online (Sandbox Code Playgroud)

更新:

显然,文档已经改回使用:

Template.registerHelper('stub', function() {
     // code
});
Run Code Online (Sandbox Code Playgroud)

然后在html文件中{{stub}}用来访问变量.