不同模板的同一助手

时间:2013-03-27 08:38:46

标签: meteor

正如official meteor wiki about handlebars所说:

  

使多个模板可以看到帮助程序的唯一方法是为每个模板分配相同的函数,或者声明一个全局帮助程序。

我正在使用telescope构建应用,问题是用户个人资料中“member since”的值丢失,如下图所示。
enter image description here
作为/client/views/users/user_profile.js中的源代码 Template.user_profile.createdAtFormatted = Template.user_item.createdAtFormatted; 效果不好。

,这是/client/views/users/user_item.js Template.user_item

中的帮手
Template.user_item.helpers({
 createdAtFormatted: function(){
   return this.createdAt ? moment(this.createdAt).fromNow() : '–';
})

,当我更改/client/views/users/user_profile.js中的代码时,这样:

Template.user_profile.createdAtFormatted = function() {
     return this.createdAt ? moment(this.createdAt).fromNow() : '–';
}

或制作像这样的全球助手

Handlebars.registerHelper("createdAtFormatted", function(){
     return this.createdAt ? moment(this.createdAt).fromNow() : '–';
});
然后,一切都很好,就像这样 enter image description here

所有我想知道为什么作业Template.user_profile.createdAtFormatted = Template.user_item.createdAtFormatted;不像我或作者所希望的那样工作?

1 个答案:

答案 0 :(得分:3)

这可能是因为helper& Meteor略有不一致。我认为帮助者后来在Meteor中添加了。

基本上有两种方法可以在meteor中定义助手。一个是:

Template.user_item.createdAtFormatted = function() {...}

以下应该做同样的事情:

Template.user_item.helpers({
    'createdAtFormatted':function() {
    ...
    }
});

但后者使用helpers并未创建Template.user_item.createdAtFormatted定义,因此上述内容为undefined。这很可能是流星中的一个错误,应该修复。我打开了一个问题:https://github.com/meteor/meteor/issues/886