2013-01-14 15 views
15

私はちょうどmoment.jsをインストールしました。今私の翡翠のテンプレートの中でmomentにアクセスしたいと思う。例:Jadeテンプレートにサーバーサイドスクリプトを含めるにはどうすればいいですか?

.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") 

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

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


私はおそらく、私は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') 
     } 
    }); 
}); 

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

答えて

19

ヘルパーは、Express 3から除去される又は

4.親切app.locals

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

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

app.localsはどのビューファイルでも使用できます(JadeまたはEJS)。

moment().format('YYYY-MM-DD h:mm:ss'); 
8

This answerdynamicHelpersのドキュメントは、Expressドキュメントから不思議に姿を消したようですが、正しい方向を指摘しました。

また、私はダイナミックヘルパーを必要としませんでした。ちょうど静的なものです(リクエスト/レスポンスへのアクセスはありません)。だから、私は暗闇の中で、それが呼び出されることに刺し傷を取った:

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

魅力のように動作します! momentはすべての私の意見で利用できるようになりました。

+14

ヘルパー概念は、 '([' app.locals'](http://expressjs.com/api.html#app.locals)あなたは「静的なヘルパー」の意味は何エクスプレス3からされて削除されましたapp.locals.moment = require( 'moment'); ')。 '.dynamicHelpers'はミドルウェアを使います。 – elmigranto

関連する問題