有没有办法渲染字符串灰尘模板而不先编译它?

时间:2016-05-04 17:38:55

标签: javascript node.js dust.js

用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是一种虚构的方法;这只是为了清晰起见。

2 个答案:

答案 0 :(得分:2)

你可以用几行代码自己做 - 毕竟这是Javascript。

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

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

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

或者作为一个流:

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

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

答案 1 :(得分:0)

有点晚但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);
})