如何在 dust.js 中包含原始的、未编译的部分?

How do you include a raw, uncompiled partial in dust.js?

我的 dust 工作得相当好,但我希望能够包含一个文件,例如 css 文件,而无需编译和渲染它。

看来我可能需要创建一个加载文件并直接注册内容的 onLoad 处理程序。

有没有办法在灰尘中做到这一点?

您可以利用 Dust 对流和承诺的原生支持,使文件包含变得非常好。具体实现取决于你是运行服务器端还是客户端的Dust,但思路是一样的。

编写一个加载文件的帮助程序,returns 为结果编写一个 Stream 或 Promise。 Dust 会将其异步渲染到模板中,因此执行文件 I/O 不会阻止处理模板的其余部分。

为简单起见,我将编写一个上下文助手,但您也可以将其设为 Dust 全局助手。

{
  "css": function(chunk, context, bodies, params) {
    // Do some due diligence to sanitize paths in a real app
    var cssPrefix = '/css/';
    var path = cssPrefix + context.resolve(params.path);
    return $.get(path);
  }
}

然后像这样使用它:

{#css path="foo/bar.css"}{.}{/css}

或服务器的流媒体版本:

{
  "css": function(chunk, context, bodies, params) {
    // Do some due diligence to sanitize paths in a real app
    var cssPrefix = '/css/';
    var path = cssPrefix + context.resolve(params.path);
    return fs.createReadStream(path, "utf8");
  }
}