7

我正试图让 Mustache 与 Express 一起正常工作,正如人们可以猜到的那样,我遇到了麻烦。

以下行将 Mustache 初始化为干净整洁。变量按预期呈现。

app.register('html', require(__dirname+'/public/js/libs/mustache.js'));

但是,当混音中加入偏音时,问题开始上升。使用 Mustache,这里的部分应该调用标题视图/部分。

{{> 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 部分......

4

3 回答 3

3

使用 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}})开头的双胡须将被视为部分的。部分中的文件将在运行时呈现。将此文件视为我们要插入的部分文件:

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}}
于 2018-08-07T14:20:07.427 回答
2

设法使它与最新版本的 hogan-express 一起工作。

https://github.com/vol4ok/hogan-express

所需要的只是安装 hogan-express 并将其用作 express 上的模板引擎。无需破解或调整。

于 2012-10-24T14:02:38.690 回答
0

我不确定你的确切内容是什么......我使用来自 npm 的 mustache 模块 +你链接到./public/js/libs/mustache.js的模板对象的变体。

无论如何,您传递给的对象app.register需要mustache.to_html(template, locals, partials)在某个时候调用。

您需要将 partials 对象作为第三个参数传递给 mustache's to_html

于 2012-07-02T17:13:27.647 回答