我的灰塵工作得相當好,但我希望能夠包含一個文件,如一個CSS文件,而無需編譯和渲染它。如何在dust.js中包含原始未編譯的部分?
看來也許我需要創建一個加載文件並直接註冊內容的onLoad處理程序。
有沒有辦法在塵埃中做到這一點?
我的灰塵工作得相當好,但我希望能夠包含一個文件,如一個CSS文件,而無需編譯和渲染它。如何在dust.js中包含原始未編譯的部分?
看來也許我需要創建一個加載文件並直接註冊內容的onLoad處理程序。
有沒有辦法在塵埃中做到這一點?
您可以利用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");
}
}
這是一個很好的解決方案,比我所做的更靈活。 我解決了這個問題,通過預先加載我需要的文件到上下文中的數組(異步,但在一個批處理),然後注入一個#css部分。我只是抓住我指定的目錄中的所有內容並注入它們,並使用全局切換來嵌入或添加帶有源標記的HTML元素。該開關在調試時非常方便。 我最終構建了一個資產打包器,這可能是過度的。但是,看起來比評估資產包裝商和任務經理更容易,並且學習如何完成一項工作。 – JoeAndrieu
你在正確的軌道上。而不是使用onload處理程序,該處理程序會編譯提供給它的任何內容,而是嘗試編寫使用'chunk.write'的自定義幫助程序。以後我可以設置一個例子。 – Interrobang