我是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> -
<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}}
并导致错误。但我不知道这是多么正确。任何帮助表示赞赏。
答案 0 :(得分:0)
我认为您需要使用三个大括号,以便mustache
不会尝试清理输入数据。虽然我对Date对象的做法并不乐观。
{{#helper.friendly_time}}
{{{mtime}}}
{{/helper.friendly_time}}
另一个选项是更新friendlyTime
,以便在尝试调用getFullYear
之前,它还可以接受字符串并将其转换为日期对象。
function friendly_time(date){
if(!date.getFullYear) {
date = new Date(date);
}
...
}