我有这个对象
{ title: 'A TITLE',
description: 'Lorem Ipsum...',
_id: 50806930bbf612a858000013,
__v: 0,
screenings:
[ { venue: 'Venue1', dates: [Object] },
{ venue: 'Venue2', dates: [Object] } ] }
来自我的mongoDB。
dates
是一个日期列表(dah!)。
现在我的问题是我希望将它们格式化为momentjs 服务器端。
看起来我应该使用小胡子lambdas,但看起来不可能使用我的堆栈( expressjs ,合并,把手 .. 。)
有人解决了这个问题吗?
这就是我现在正在尝试的事情
Theatre.find({"screenings.dates":{$gte:lastSunday, $lte:nextSunday}}, function(err, entities){
res.render('index', {
entities: entities,
giveitatry: function(a) {
return moment(a).format("MMM Do YY")
}
});
});
在我的模板上我有:
{{#entities}}
<div class="span3">{{#giveitatry}} {{dates.0.}} {{/giveitatry}}</div>
{{/entities}}
这是expressjs conf
的一部分var moment = require('moment');
var express = require('express')
, cons = require('consolidate')
, name = 'mustache';
app.configure(function(){
app.set('view engine', 'hjs');
app.engine('.hjs', cons.mustache);
...
是的,扩展仍然是hjs'因为我开始使用hogan但是我无法用hogan这样做,所以我开始整合+胡子。
我正在使用节点v0.8.8和expressjs 3.0.0rc4
答案 0 :(得分:1)
如果使用mustache.js lambdas,则需要返回一个函数。此函数的参数是text
,其中包含模板内容的文本表示,以及可以显式调用以呈现模板的render
。
我到目前为止找到的最佳解决方案是首先使用默认渲染器,然后将生成的日期字符串传递回新Date
对象的构造函数,然后将其传递给moment
功能。最后,您只需使用desirated格式返回日期。
完整代码:
giveitatry: function() {
return function(text, render) {
var date = moment(new Date(render(text)));
return date.format("MMMM Do YY");
}
}
同样适用于日期列表:
{{#entities}}
{{#dates}}
<div class="span3">{{#giveitatry}}{{.}}{{/giveitatry}}</div>
{{/dates}}
{{/entities}}
在这个问题上,你并不孤单。在mustache.js的问题跟踪器中正在引入帮助器/过滤器,以便为此问题提供更清晰的解决方案(请参阅[1],[2])。