【问题标题】:Expressjs + handlebars formatting dateExpressjs +车把格式化日期
【发布时间】:2012-10-22 09:23:04
【问题描述】:

我有这个对象

{ 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

【问题讨论】:

  • 您想在服务器端还是在客户端进行格式化?你也可以添加一些示例代码,也许我可以帮忙?
  • 另外,为什么你的胡子和车把都有,或者你只是在考虑用哪一个?
  • @jsalonen 我想要一个类似小胡子的模板,最接近的内置东西看起来像 hogan,但无法正常工作,因此我们认为我们可以将 consolidate 与车把一起使用,但它无法正常工作

标签: node.js express handlebars.js mustache momentjs


【解决方案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])中正在引入帮助程序/过滤器来为这个问题提供更清洁的解决方案。

【讨论】:

  • 首先感谢您的帮助。它还没有工作,但我想我把事情弄得一团糟。您的代码可以使用标准的小胡子吗?我的猜测是我在配置 expressjs 以使用带有 consolidatejs 的 mustache 时遇到了一些问题
  • 是的,我的代码在标准胡子中工作(mustache=0.7.0 和 node.js 0.6.15)。请参阅此链接以获取完整的工作代码:coderemarks.com/review/VVNxCngBBWUbmeos
  • 哦,等等,我认为您需要从模板中删除多余的点:将 {{dates.0.}} 更改为 {{dates.0}}。否则你会得到类似undefined NaNth NaN
  • 还是不行。它可能是巩固和小胡子。我将添加我的 expressjs conf
  • console.log(render);控制台.log(文本);给出 undefined undefined (它们都在 giveitatry 内部函数中)
猜你喜欢
  • 2018-02-23
  • 2015-12-18
  • 1970-01-01
  • 2014-09-17
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多