1

私はこのオブジェクトを持っています

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

私のmongoDBから出てきます。

dates日付のリストです(dah!)。

私の問題は、momentjsサーバー側でフォーマットしたいということです。

口ひげのラムダを使用する必要があるように見えますが、スタック(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}}

これがexpressjsconfの一部です

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でそれを行うことができなかったので、consolidate+mustacheに移動しました。

ノードv0.8.8とexpressjs3.0.0rc4を使用しています

4

1 に答える 1

1

mustache.jsラムダを使用する場合は、代わりに関数を返す必要があります。この関数のパラメーターはです。これ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 に答える