我設法解決這個問題。至少我改變了幾行就得到了我想要的東西。
什麼本質上的解決方案確實是從renderFile
函數傳遞參數locals
爲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
和/lib/swig.js
文件的行524
。當地人實質上成爲options
然後,我只是在同一個文件
if(options.layout)
parentName = options.layout;
加入這個在行405
雖然叫快遞的路由定義的res.render命令,我只需要添加一個佈局選項與相對佈局的位置。
res.render('index', { title: 'Express', layout: 'layouts/main.layout' });
這完全解決了我的問題。保持正常{% extend %}
功能(當不覆蓋layout
選項時),同時能夠動態設置佈局。
唯一的缺點是,layout
成爲一個保留的選項,你可以重構這個不是我想的問題。
希望這可以幫助別人。兩行更改和兩行代碼使我可以實現動態佈局。性能是一樣的。
看着代碼,我會說這是不可能的。 – robertklep