在express 3.0中使用mustache.js中的函数

时间:2012-10-07 16:02:32

标签: node.js express mustache

我是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}}并导致错误。但我不知道这是多么正确。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我认为您需要使用三个大括号,以便mustache不会尝试清理输入数据。虽然我对Date对象的做法并不乐观。

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

另一个选项是更新friendlyTime,以便在尝试调用getFullYear之前,它还可以接受字符串并将其转换为日期对象。

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

    ...
}