【问题标题】:Node.js + Express - How to get Mustache partials working?Node.js + Express - 如何让 Mustache 部分工作?
【发布时间】:2012-04-27 21:23:06
【问题描述】:

我正在尝试让 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 部分...

【问题讨论】:

    标签: node.js express mustache


    【解决方案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);
    });
    

    任何以大于号开头的双胡须(即{{&gt; 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】:

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

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

      只需安装 hogan-express 并将其用作 express 上的模板引擎。无需修改或调整。

      【讨论】:

      • 关于您的工作方式或遇到的问题的任何进一步信息?引导某人的流程再多一点;)(然后我会投票)
      • 我所做的只是安装 hogan-express 并将其用作 express 上的模板引擎。 :) 无需修改或调整。
      【解决方案3】:

      我不确定你的 ./public/js/libs/mustache.js 到底是什么...我使用来自 npm 的 mustache 模块 + 模板对象 you linked to 的变体。

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

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

      【讨论】:

        猜你喜欢
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 2011-08-25
        相关资源
        最近更新 更多