0

我是 mustache.js 的新手,在 node.js 的 express 3.0 中使用它,我想使用辅助函数来格式化模板中的时间。

在 app.js 中:

app.locals({
  helper: {
    friendly_time: require('./libs/util').friendly_time
  }
});

friendly_time 是一个函数function friendly_time(date){ ... },date 是一个Date对象。

在 index.hjs 中:

{{#articles}}
  <div class="org-articles">
    <ul class="org-articles-list">
      <li class="org-articles-item">
        <a class ="org-article-title" href="/o/{{title}}">
        {{title}}
        </a>&nbsp;-&nbsp;
        <span class="org-article-mtime">
          {{#helper.friendly_time}}
            {{mtime}}
          {{/helper.friendly_time}}
        </span>
      </li>
    </ul>
  </div>
{{/articles}}

articles是一个包含对象的数组,例如:

{
    title: 'title',                           // a string
    mtime: new Date() // a js Date object
}

然后进程抛出错误:

TypeError: Object {{mtime}} has no method 'getFullYear'

我知道articles[i].mtime被视为一个字符串{{mtime}},这会导致错误。但我不知道这有多正确。任何帮助表示赞赏。

4

1 回答 1

0

我认为您需要使用三个大括号,这样mustache就不会尝试清理输入数据。虽然我不肯定它对 Date 对象的作用。

{{#helper.friendly_time}}
    {{{mtime}}}
{{/helper.friendly_time}}

另一种选择是更新friendlyTime,以便它也可以接受字符串并将其转换为日期对象,然后再尝试调用getFullYear.

function friendly_time(date){
    if(!date.getFullYear) {
        date = new Date(date);
    }

    ...
}
于 2012-10-07T16:31:02.000 回答