2015-12-22 26 views
0

我的灰尘工作得相当好,但我希望能够包含一个文件,如一个CSS文件,而无需编译和渲染它。如何在dust.js中包含原始未编译的部分?

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

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

+1

你在正确的轨道上。而不是使用onload处理程序,该处理程序会编译提供给它的任何内容,而是尝试编写使用'chunk.write'的自定义帮助程序。以后我可以设置一个例子。 – Interrobang

回答

1

您可以利用Dust原生支持的流和承诺,使文件包含非常好。确切的实现取决于你是否在服务器或客户端上运行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} 

还是一个流j版服务器:

{ 
    "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"); 
    } 
} 
+0

这是一个很好的解决方案,比我所做的更灵活。 我解决了这个问题,通过预先加载我需要的文件到上下文中的数组(异步,但在一个批处理),然后注入一个#css部分。我只是抓住我指定的目录中的所有内容并注入它们,并使用全局切换来嵌入或添加带有源标记的HTML元素。该开关在调试时非常方便。 我最终构建了一个资产打包器,这可能是过度的。但是,看起来比评估资产包装商和任务经理更容易,并且学习如何完成一项工作。 – JoeAndrieu

相关问题