是否可以同步渲染dust.js模板?

cli*_*ers 19 javascript asynchronous sync dust.js

我正在尝试为客户端HTML/JS模板系统编写一个适配器,以便在引擎盖下使用dust.js.不幸的是,API期望渲染操作同步发生:渲染输出应该从render()调用返回.Dust.js是异步的,并将渲染输出传递给回调函数.有没有办法解决这个问题,无论是在Dust API还是通过一些疯狂的Javascript黑客攻击?

Mat*_*ogt 16

DustJS只会在需要渲染的资源(模板,部分)尚未加载时异步执行.

如果在执行该模板之前加载了模板的所有依赖项,那么它将同步执行(据我所知,无论如何).所以你可以这样做:

var result;
dust.render("tpl", data, function(err, res) {
   result = res;
});
console.log(result); // result will actually already be filled out if dustjs didn't
// have to go look for resources somewhere.
Run Code Online (Sandbox Code Playgroud)

下面是一个更全面的例子:(这里是一个jsfiddle链接,所以你可以运行它:http://jsfiddle.net/uzTrv/1/)

<script type="text/javascript" src="dust.js"></script>
<script>
    var tpl = dust.compile("Omg {#people} {.} {/people} are here! {>partial/}", "tpl");
    var partial = dust.compile("I'm a partial but I've already been included so things still run {how}", "partial");
    dust.loadSource(tpl);
    dust.loadSource(partial);

    var data = {
        people: ["jim", "jane", "jack", "julie"],
        how: "synchronously!"
    };

    var result;
    dust.render("tpl", data, function(err, res) { 
        result = res;
    });
    console.log(result);
</script>
Run Code Online (Sandbox Code Playgroud)

可能有些情况(除了我提到的那个)我错了......我不知道关于dustjs的一切.

  • 一个警告:dust.onload(可用于延迟加载模板/部分)不是唯一可以异步的东西.您的JSON数据中的任何自定义帮助程序或函数也可以通过调用chunk.map然后进行ajax调用,setTimeout等来异步.因此,这绝对不是一个完整的证明解决方案. (4认同)