Mustache不会在函数内部评估{{}}

时间:2013-06-15 04:45:32

标签: mustache momentjs

我正在尝试使用带胡子的moment.js格式化JS Date()对象,但是小胡子不会将评估值传递给函数。

在骨干视图中:

render: function () {
    var user = this.user.toJSON ();  //model

    _.extend (user, {formatLastLoginAt: this.formatLastLoginAt});

    var rendered = mustache.render (template, user);
    this.$el.html (rendered);

    return this;
},

formatLastLoginAt: function () {
   return function (lastLoginAt) {
     return moment (lastLoginAt).format ('Do MMMM YYYY');
  }
}

用户对象绑定: user object before pass to mustache

在模板中:

{{#lastLoginAt}}
    <tr>
     <td>Last Login:</td> 
     <td>{{#formatLastLoginAt}}{{lastLoginAt}}{{/formatLastLoginAt}}</td>
    </tr>
{{/lastLoginAt}}

moment.js提供NaN错误,因为'lastLoginAt'作为文字字符串“{{lastLoginAt}}”而不是Date ()值传入。

尝试moment ().format (),它有效。因此lambda结构应该没问题且{{#lastLoginAt}}非空。

我错过了什么?感谢您的建议。谢谢。

1 个答案:

答案 0 :(得分:4)

Mustache不会为您呈现内容。你的函数只需要一个参数lastLoginAt,但是Mustache会传递给你另一个:render。使用render调用lastLoginAt会扩展变量:

formatLastLoginAt: function () {
   return function (lastLoginAt, render) {
     lastLoginAt = render(lastLoginAt);  // expand variable
     return moment (lastLoginAt).format ('Do MMMM YYYY');
  }
}