1

翡翠のレイアウトでユーザーバーの例を設定する方法を理解しようとしています。実際にはlayout.jadeがあります。

doctype 5
html
head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
body
    include userbar
    block content

インクルードには、現在のページに可変環境しかありません。

私を噛まないでください、あなたがあなたのレイアウトにこのコードを持っているなら、私はSymfony2 franmwork:Dの例を例として取り上げます

{% render "AcmeBundle:Acme:menu" %}

現在のページに関係なく、AcmeControllerとmenuAction()メソッドを呼び出します

同じシステムが欲しいのですが、jadeページのレンダリングでrequestHandlerの例が呼び出されます

exports.userbar = function(req, res){
    var user = 'ant';
    res.render('userbar', { user: user })
};

そして今、これは私のユーザーバーをレンダリングします:)しかし、私は翡翠でそれを行う方法がわかりません

はっきりしない場合は質問してください

ありがとう :)

4

1 に答える 1

3

あなたの場合、{% render "AcmeBundle:Acme:menu" %}これも各ページに追加する必要があります。エクスプレスでは、同じタスクをはるかに簡単に実行できると思います。そして、ここにはさまざまなオプションがあります。最初のオプションは、次userのような特定のリクエストハンドラでミドルウェアを使用することです

ユーザーを見つけてプロパティを設定するだけのエクスプレスミドルウェアを追加しapp.localsます。app.localsすべてのjadeファイルで表示されます。たとえば、この単純なミドルウェアで十分です。

var user = function(req, res, next)
{
   var user = db.find(...);
   app.locals({user: user});
   next(); // Do not render the page here, call the next() 
}

次に、ルーティングで次のように使用var userします。

app.get('/your_desired_url', user, function(req, res) {
    res.render('your_required_jade_file')
});

このメソッドは、必要な任意の要求ハンドラーで使用できます。例えば、

app.get('/your_desired_url2', user, function(req, res) {
    res.render('your_required_jade_file')
});

app.get('/your_desired_url2', user, function(req, res) {
    res.render('your_required_jade_file')
});

2番目のオプションでは、このミドルウェアを次のような一般的なミドルウェアとして追加できます。

app.use(function(req, res, next) {
    var user = db.find(...);
    if(user) app.locals({user: user});
    else app.locals({user: null});

    next(); // Do not render the page here, call the next() 
});

2番目のケースでは、すべてのリクエストがこの関数を介して渡されるため、.jadeファイルではuservarabileを常に使用できます。

.jade構造では、次を使用できます

layout.jade

!!! 5
html
  head
  body
    include userbar
    block content

そして例えばdashboard.jade

extends ./layout
block content
  // Your dashboard specific content goes here..

これで問題が解決することを願っています。

于 2012-11-15T15:49:35.233 に答える