2015-12-22 70 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

相關問題