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オブジェクトです。

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入力データをきれいにしようとしないように、3 つの中かっこを使用する必要があると思います。私はそれがDateオブジェクトで何をするのか確信が持てませんが。

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

もう 1 つのオプションはfriendlyTime、文字列を受け入れて日付オブジェクトに変換できるように更新してから、 を呼び出すことgetFullYearです。

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

    ...
}
于 2012-10-07T16:31:02.000 に答える