web-dev-qa-db-ja.com

ハンドルバーとExpressJSを使用した複数のレイアウト?

Express 4のテンプレートエンジンとしてハンドルバーを使用している場合、すべてのビューに使用する単一のレイアウトテンプレートを指定するオプションしかないようです。

app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));

アプリに複数のレイアウトが必要な場合はどうなりますか?仮に viewA.hbsは1つのレイアウトを使用し、viewB.hbs別のレイアウトが必要ですか?

私はnodejsを学んでいるので、PHP Laravelバックグラウンドから来ています ブレードテンプレートエンジン 各ビューファイルの上部で使用するレイアウト。これにより、特定のビューのレイアウトテンプレートを非常に簡単に切り替えることができます。

13
Jake Wilson

Renderメソッドを呼び出すときに、ルート/コントローラーからレイアウトを渡すことができるはずです。

router.get('/', function(req, res) {
    res.render('home', {layout: 'viewBLayout.hbs'});
});

翡翠はテンプレートの中からレイアウトを切り替えることができると確信していますが、ハンドルバーでそれができるかどうかはわかりません。

41
Ryan

express-hbs を使用する場合は、次のようなコメントを使用してテンプレートでレイアウトを指定できます。

{{!< layout}}

または、 exphbs を試すこともできます。また、レイアウトコメントをサポートし、複数のレイアウトをネストできます。 (免責事項:私はそれを書きました。)

4
gnowoel

最初に、/ layoutsディレクトリに「main.handlebars」と「backend.handlebars」という名前の2つのファイルを作成してください。

たとえば、必要に応じて2つのルートでこのコードを試してください

router.get('/', function(req, res) {
    res.render('home', {layout: 'main'});
});

router.get('/backend', function(req, res) {
    res.render('home', {layout: 'backend'});
});
0
rohani