簡體   English   中英

Node.js + Express - 如何讓Mustache部分工作?

[英]Node.js + Express - How to get Mustache partials working?

我正試圖讓Mustache與Express一起正常工作,正如人們可以猜到的那樣,我遇到了麻煩。

以下行初始化了Mustache很好並且干凈。 變量按預期呈現。

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

管理使用最新版本的hogan-express。

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

所需要的只是安裝hogan-express並將其用作express上的模板引擎。 不需要黑客攻擊或調整。

使用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 /視圖/ partial.mst

<h2>418 | I'm a teapot</h2>

這是我們的模板:

MVC /視圖/ template.mst

<h1>template.mst file</h1>

<!-- output: <h2>418 | I'm a teapot</h2> -->
{{> partial}}

我不確定你的./public/js/libs/mustache.js到底是什么......我使用npm的胡子模塊+ 你鏈接到的模板對象的變體。

在任何情況下,傳遞給app.register的對象都需要在某個時刻調用mustache.to_html(template, locals, partials)

您需要將partials對象作為第三個參數傳遞給mustache的to_html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM