【问题标题】:Render def file independently in dot.js在 dot.js 中独立渲染 def 文件
【发布时间】:2025-11-29 14:00:02
【问题描述】:

我使用 {{#def.header}} sn-​​p 在 index.dot 中包含一个 header.def 文件,并使用以下 sn-p 呈现 index.dot 文件。

var dotjs = require('dot');
var dots = dotjs.process({ path: "./views"});
app.get('/',function(request, response){
    response.send(dots.index());
});

我还想做的是仅在单独的 url 上呈现标题。比如:

app.get('/header',function(request, response){
    response.send(dots.header()); // header.def is not compiled to a dot.header function
});

【问题讨论】:

    标签: javascript node.js dot.js


    【解决方案1】:

    也许您可以创建另一个 .def 文件(例如“onlyHead.dot”)并将静态标题包含在该文件中,而无需其他任何内容。然后以与您相同的方式发送 onlyHead.dot。

    您还可以使用模板引擎执行以下操作:

    在主应用中:

    /* Template = doT*/
    var dot = require("dot").process({ 
      path: (__dirname + "/views")
    });
    
    // view engine setup using .dot files
    app.engine('dot', function(template, options, cb){
        return cb(null, dot[path.parse(template).name](options));
    });
    

    然后在您的视图中,您可以像这样渲染它(使用 router.get 或使用 app.get):

    app.get('/',function(request, response){
        var myData = {
           title : 'My title',
           someData : 'My Data'}
        response.render('index', myData);
    });
    

    您的 index.dot 模板可能如下所示:

    {{#def.static}}
    <h1>{{=it.title}}</h1>
    <div>The requested data is: {{=it.someData}} </div>
    

    See my answer here

    【讨论】: