Express 4のテンプレートエンジンとしてハンドルバーを使用している場合、すべてのビューに使用する単一のレイアウトテンプレートを指定するオプションしかないようです。
app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));
アプリに複数のレイアウトが必要な場合はどうなりますか?仮に viewA.hbs
は1つのレイアウトを使用し、viewB.hbs
別のレイアウトが必要ですか?
私はnodejsを学んでいるので、PHP Laravelバックグラウンドから来ています ブレードテンプレートエンジン 各ビューファイルの上部で使用するレイアウト。これにより、特定のビューのレイアウトテンプレートを非常に簡単に切り替えることができます。
Renderメソッドを呼び出すときに、ルート/コントローラーからレイアウトを渡すことができるはずです。
router.get('/', function(req, res) {
res.render('home', {layout: 'viewBLayout.hbs'});
});
翡翠はテンプレートの中からレイアウトを切り替えることができると確信していますが、ハンドルバーでそれができるかどうかはわかりません。
express-hbs を使用する場合は、次のようなコメントを使用してテンプレートでレイアウトを指定できます。
{{!< layout}}
または、 exphbs を試すこともできます。また、レイアウトコメントをサポートし、複数のレイアウトをネストできます。 (免責事項:私はそれを書きました。)
最初に、/ 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'});
});