#each循环中的Handlebars.js帮助器返回相同的结果?

时间:2014-12-16 04:25:18

标签: javascript ember.js handlebars.js handlebarshelper

我试图在#each循环中使用车把注册的momentjs助手来格式化我的日期。注册助手看起来像这样:


    Handlebars.registerHelper('dateFormat', function(context) {
      if (window.moment) {

        return moment(Date(context)).format("MMM Do, YYYY");
      }else{
        return context;
      };
    });

把手圈看起来像这样

{{#each controller}}
    {{{体}}}
   {{{dateFormat date}}}
  {{/每}}

正在循环的JSON在此


    {
       "idea":[
          {
             "_id":"548eeebeda11ffbe12000002",
             "body":"cow",
             "tag":"cow",
             "date":"2014-12-15T14:22:54.088Z"
          },
          {
             "_id":"548eeec2da11ffbe12000003",
             "body":"cow",
             "tag":"moose",
             "date":"2014-10-15T14:22:58.947Z"
          }
       ]
    }

所以我遇到的问题是它很好地循环它只是没有正确评估帮助器。

我看到的结果如下所示

牛2014年12月15日
牛2014年12月15日
日期总是一样的。

它应该看起来像这样 牛2014年12月15日
牛2014年10月15日

2 个答案:

答案 0 :(得分:1)

我使用this.get(' date');


    Handlebars.registerHelper('dateFormat', function(context) {
          if (window.moment) {

            return moment(this.get('date')).format("MMM Do, YYYY");
          }else{
            return context;
          };
        });

答案 1 :(得分:0)

最初的问题是你没有在循环的每次迭代中实例化一个新的日期。

Handlebars.registerHelper('dateFormat', function(context) {
  if (window.moment) {
               // new Date() !, calling Date("anything") returns current date
    return moment(new Date(context)).format("MMM Do, YYYY");
  }else{
    return context;
  };
});

两个日期都返回了预期的结果:

new Date("2014-10-15T14:22:58.947Z")
> Wed Oct 15 2014 09:22:58 GMT-0500 (CDT)
new Date("2014-12-15T14:22:54.088Z")
> Mon Dec 15 2014 08:22:54 GMT-0600 (CST)