3

Express.js で Mustache パーシャルを読み込もうとしていますが、明らかに少し問題があります。ビューの部分ファイルが含まれている場合、次のような EJS アプローチを取ることは可能ですか?

Node.js - EJS - パーシャルを含む

index.htmlというテンプレート ファイルがあります。

<html>
    <head>
        <title>My Title</title>
    </head>
    <body>
        {{>header}}
    </body>
</html>

およびheader.mustache

<div class="header">
    <div style="display: table-cell;padding-left: 10px;padding-top: 8px;vertical-align: middle;">
        <img src="images/logo.png">
    </div>
</div>

Express.js では、レンダリング関数は次のようになります。

app.get('/', function(req, res) {
    res.render('signup.html', {
        partials: {
            header: partial('header.mustache')   //this line is wrong        
        }
    });
});

私は初心者ですが、どうにかして header.mustache の内容全体をヘッダー オブジェクトにレンダリングまたは読み取りたいと考えています。これは可能ですか?

4

1 に答える 1

1

次のリンクを見てください。express.js で口ひげをセットアップする方法を説明している可能性があります。

Express での Mustache テンプレートの使用

外部ファイルからパーシャルをロードできるようにするには、tmpl.compile を次のように変更します。

compile : function(source, options) {
    var views = options.views || './views';
    var extension = options.extension || '.html';

    if (typeof source == 'string') {
        return function(options) {
            options.locals = options.locals || {};
            options.partials = options.partials || {};

            if (options.body) // for express.js > v1.0
                locals.body = options.body;

            for(var p in options.partials) {
                var partialFileName = views + '/' + options.partials[p] + extension;

                if(path.existsSync(partialFileName)) {
                    options.partials[p] = fs.readFileSync(partialFileName, "utf-8");
                }
            }               
            return mustache.to_html(source, options.locals, options.partials);
        };
    } else {
        return source;
    }
}

また、次の 2 つの require ステートメントを追加する必要があります。

var fs = require("fs"),
var path = require("path");

viewsこの変更は、パーシャルがディレクトリにあり、拡張子で終わることを前提としています.html(したがって、例として、パーシャルの拡張子を .html に変更するか、それに応じて上記のコードを調整することをお勧めします)。

部分レンダリングに以下を使用できるようになりました

app.get('/', function(req, res) {
    res.render('signup.html', {
        partials: {
            header: 'header'   //this now works :)
        }
    });
});
于 2012-05-25T16:46:39.550 に答える