有没有一种方法可以在不先编译的情况下渲染字符串灰尘模板?

Is there a way to render a string dust template without compiling it first?

是否可以用 dustjs 做这样的事情?反对编译模板,然后在 render 方法中引用它。

>    
> var dust = require('dustjs-linkedin');
>
> dust.stringRender("Hello {name}, how are you?", { name: "Joe" }, function(err, res) {
>   console.log(res);
> });
'Hello Joe, how are you?'
>

我知道stringRender是一个虚构的方法;这只是为了清楚起见。

您只需几行代码就可以自己完成 — 毕竟这是 Javascript。

 function stringRender(source, context, callback) {
    var tmpl = dust.loadSource(dust.compile(source));
    return dust.render(tmpl, context, callback);
 }

但是,我们认为这是一个典型案例,因此您可以完全按照上面使用函数 stringRender 的方式使用 dust.renderSource。 (上面的代码基本就是dust.renderSource的代码)

dust.renderSource("Hello {name}!", { name: "Jim" }, function(err, data) {
  ...
});

或作为流:

dust.renderSource("Hello {name}!", { name: "Jim" }).pipe(...)

但是,您不应该在生产中使用这个,因为编译是 Dust 模板生命周期中最慢的部分。在生产中,您应该始终预编译和缓存您的模板。

有点晚但是https://jsfiddle.net/7jfzpgby/

if (!dust.stringRender)
{
  dust.stringRender = function (template, data, cb)
  {
    var compiled = dust.compile(template);
    var template = dust.loadSource(compiled);
    dust.render(template, data, cb);
  };
}

dust.stringRender("Hello {name}, how are you?", { name: "Joe" }, function (error, output) {
  console.info(output);
})