我正在努力让平板模板引擎与express.js一起使用。我最初的尝试是:
app.register('.html', {
compile: function (str, options) {
var template = new plate.Template(str);
return function(locals) {
return template.render(locals, function(err, data) {
return data;
});
}
}
});
我看到问题是template.render没有返回任何内容(未定义),而是将数据传递给回调。我不确定如何使它在这种情况下工作,因为Express期望compile函数返回一个函数,该函数在被调用时直接返回渲染模板。
我想也许我可以使用promises来解决这个问题,但是因为快递代码不希望返回承诺,所以也没有成功。我不太愿意加速承诺,所以我可能只是做错了:
app.register('.html', {
compile: function (str, options) {
var promise = new Promise();
var template = new plate.Template(str);
return function(locals) {
template.render(locals, function(err, data) {
promise.resolve(data);
});
return promise;
}
}
});
以下是可行的自定义实现示例。区别在于下划线模板template()函数直接返回渲染的字符串,如下所示:
app.register('.html', {
compile: function (str, options) {
var template = _.template(str);
return function (locals) {
return template(locals);
};
}
});
我真的很喜欢使用Plate模板,因为{%block%}标签太棒了。任何帮助表示赞赏。
相关文件: