私はこれを解決することができました。少なくとも、数行を変更することで、必要なものを手に入れました。
ソリューションが本質的に行うことは、関数から関数にlocals
パラメーターをそのまま渡すことです。renderFile
compileFile
this.renderFile = function (pathName, locals, cb) {
if (cb) {
exports.compileFile(pathName, locals, function (err, fn) {
if (err) {
cb(err);
return;
}
cb(null, fn(locals));
});
return;
}
return exports.compileFile(pathName, locals)(locals);
};
これは、ファイルの行514
と行で発生します。地元の人々は本質的になる524
/lib/swig.js
options
405
次に、これを同じファイルの行に追加しただけです
if(options.layout)
parentName = options.layout;
Express のルート定義で res.render コマンドを呼び出しながら、レイアウトの相対位置を指定してレイアウト オプションを追加するだけです。
res.render('index', { title: 'Express', layout: 'layouts/main.layout' });
これで問題は完全に解決しました。レイアウトを動的に設定しながら、通常の機能を維持し{% extend %}
ます (オプションでオーバーライドしない場合)。layout
唯一の欠点は、それlayout
が予約済みのオプションになることです。これをリファクタリングして、問題にならないようにすることができます。
これが誰かに役立つことを願っています。2 行の変更と 2 行のコードにより、動的なレイアウトが可能になりました。性能は同じです。