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>'           
        }
    });
});

したがって、パーシャルはまったく機能していないようです。パーシャルがいくらか機能するハックを1つ見つけました。

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

正確に何が入っているのかわかりません./public/js/libs/mustache.js...npmの口ひげモジュール+リンクしたテンプレートオブジェクトのバリエーションを使用します。

いずれの場合も、渡すオブジェクトはある時点でapp.register呼び出す必要があります。mustache.to_html(template, locals, partials)

口ひげの3番目の引数としてpartialsオブジェクトを渡す必要がありますto_html

于 2012-07-02T17:13:27.647 に答える