我正在尝试使用Express使Mustache正常工作,正如人们可以猜到的那样,我遇到了麻烦。
以下行初始化了Moustache很好并且干净。变量按预期呈现。
app.register('html', require(__dirname+'/public/js/libs/mustache.js'));
然而,当混合物中出现偏弯时,问题开始上升。使用Mustache,这里部分应该调用header view / partial。
{{> header}}
但唉,没有任何反应。 :/即使我直接提供部分,Mustache也无法呈现它。
app.get('/', function(req, res) {
res.render('welcome', {
partials: {
header: '<h1>Header</h1>'
}
});
});
所以,似乎部分根本不起作用。我发现一个黑客可以让部分工作有点起作用:
http://bitdrift.com/post/2376383378/using-mustache-templates-in-express
之后,部分渲染在渲染调用时直接提供(见上文),但是在将部分直接渲染到视图/布局时仍然无法实现:
布局看起来像这样:
Behold, the header
{{> header}}
<p>Let's move to more important stuff...</p>
标题视图如下所示:
<h1>Header</h1>
Express可以自己加载视图,但它不知道如何处理Mustache部分...
答案 0 :(得分:2)
管理以使用最新版本的hogan-express。
https://github.com/vol4ok/hogan-express
所需要的只是安装hogan-express并将其用作express上的模板引擎。不需要黑客攻击或调整。
答案 1 :(得分:1)
使用express(至少为版本3)和mustache-express,您可以照常使用双胡须(以大于号开头)加载局部片段。
首先考虑以下内容附加在我们的app.js
文件中:
/** import the module */
import mustache from 'mustache-express';
/** view engine setup */
app.engine('mst', mustache());
app.set('view engine', 'mst');
app.set('views', path.join(__dirname, 'mvc/views'));
/** the route where we will display the partials */
app.get('/', (req, res) => {
let view = {
title: 'Homepage',
// ...
};
/** we are going to use a file called template.mst for rendering */
res.render('template', view);
});
任何以大于号(即{{> file}}
)开头的双胡须将被视为partial。局部文件将在运行时呈现。将此文件视为我们要插入的部分文件:
mvc / views / partial.mst
<h2>418 | I'm a teapot</h2>
这是我们的模板:
mvc / views / template.mst
<h1>template.mst file</h1>
<!-- output: <h2>418 | I'm a teapot</h2> -->
{{> partial}}
答案 2 :(得分:0)
我不确定你./public/js/libs/mustache.js
中到底是什么......我使用npm中的小胡子模块+模板对象you linked to的变体。
在任何情况下,您传递给app.register
的对象都需要在某个时刻致电mustache.to_html(template, locals, partials)
。
你需要将partials对象作为第三个参数传递给mustache的to_html
。