1

我有这个对象

{ title: 'A TITLE',
  description: 'Lorem Ipsum...',
  _id: 50806930bbf612a858000013,
  __v: 0,
  screenings: 
   [ { venue: 'Venue1', dates: [Object] },
     { venue: 'Venue2', dates: [Object] } ] }

从我的 mongoDB 出来。

dates是日期列表(dah!)。

我的问题是现在我想用 momentjs server-side格式化它们。

看起来我应该使用 mustache lambdas,但使用我的堆栈似乎是不可能的(expressjsconsolidatehandlebars ...)

有人解决了这个问题吗?

这就是我现在正在尝试的

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

4

1 回答 1

1

如果您使用 mustache.js lambda,则需要返回一个函数。此函数的参数是text,其中包含模板内容的文本表示,并且render可以显式调用以呈现模板。

到目前为止我发现的最佳解决方案是您首先使用默认渲染器,然后将生成的日期字符串传递回新Date对象的构造函数,然后将其进一步传递给moment函数。最后,您只需返回所需格式的日期。

完整代码:

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] )中正在进行对帮助程序/过滤器的介绍,它们将为这个问题提供更清洁的解决方案。

于 2012-10-22T10:08:03.093 回答