15

moment.jsをインストールしました; momentJadeテンプレート内にアクセスしたいと思います。例:

.main-content
    .container
        .access-details.clearfix
            .left
                div Logged in: <b>#{user.name}</b>
                div Access Lvl: #{user.accessLevel}
            .right
                div= moment().format("dddd, MMMM Do YYYY, h:mm:ss a")

明確にするために、日付をサーバー側でフォーマットしてから、レンダリングされた文字列としてクライアントに送信する必要があります。

では、Jadeテンプレート内でJavaScriptライブラリを利用できるようにするにはどうすればよいですか?


Expressでこれを使用していることに注意してください。

var server = express.createServer();
server.configure(function () {
    server.set('view engine', 'jade');

どのライブラリを含めるかを指示するために、何らかの方法でそこに渡さなければならないオプションはありますか?


これはローカル変数を渡すこととまったく同じであることに気づきました。例えば、

server.get('/', function (req, res) {
    res.render('index', {
        locals: {
            moment: require('moment')
        }
    });
});

しかし、私はこれをすべてのビューに渡したくありません。それを忘れた場合、メインレイアウトで使用されているため、アプリが壊れてしまいます。では、どうすればそれが常に利用可能であることを確認できますか?

4

2 に答える 2

20

ヘルパーはExpress3または4から削除されます。

どうぞご利用くださいapp.locals

app.locals.moment = require('moment');

app.localsオブジェクトはJavaScriptオブジェクトです。追加されたプロパティは、アプリケーション内でローカル変数として公開されます。

したがってapp.locals、任意のビューファイルで使用できJadeますEJS

moment().format('YYYY-MM-DD h:mm:ss');
于 2014-05-13T10:29:28.307 に答える
8

この答えは私の正しい方向を示しましたが、上のドキュメントdynamicHelpersはExpressのドキュメントから不思議なことに消えたようです。

また、動的ヘルパーは必要ありませんでした。静的ヘルパーだけが必要でした(要求/応答へのアクセスはありません)。それで私はそれが何と呼ばれるかを暗闇の中で突き刺しました:

server.helpers({
    moment: require('moment')
});

チャームのように機能します!momentすべてのビューで利用できるようになりました。

于 2013-01-14T01:18:02.197 に答える