【问题标题】:Partials rendering in Express.js and MustacheExpress.js 和 Mustache 中的局部渲染
【发布时间】:2012-05-18 11:21:12
【问题描述】:

我正在尝试在 express.js 中加载 Mustache 部分,但显然我遇到了一些麻烦。是否可以采用这样的 EJS 方法,其中包含视图部分文件:

Node.js - EJS - including a partial

我有一个名为 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 的全部内容呈现或读取到 header 对象。这可能吗?

【问题讨论】:

  • 行错了?发生了什么?您收到错误消息吗?
  • 是的,partial('header.mustache') 返回错误
  • 那么错误信息是什么?
  • 哦,它基本上说 Object # 没有“部分”方法。我不确定渲染部分文件的正确方法是什么。
  • 你用什么库来渲染小胡子?如果是this one,则必须拨打Mustache.render

标签: express mustache


【解决方案1】:

查看以下链接,它可能会解释如何使用 express.js 设置小胡子

Using Mustache Templates in Express

现在为了能够从外部文件加载部分修改 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 个要求语句

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2011-02-25
    相关资源
    最近更新 更多