2016-07-05 43 views
0

有沒有辦法在dust.js中全局關閉HTML編碼?我相信我的數據足以在渲染過程中將其關閉。不必爲每個模板文件中的每個標籤添加「| s」,而是能夠在全局範圍內設置它是理想的。dust.js全局關閉HTML編碼

如果不是,有沒有辦法使用自定義助手過濾?我創建了@val幫助器,但無法應用「| s」過濾器。根據該文件,下面應該工作:

{@val filters="|s" /}

不過,這並不在自己的工作,所以我想了一些邏輯需要放置助手本身。

+0

至今還沒有找到一個解決的第二個問題,但首先,我可以通過更新「| h」過濾器來避免自動轉義: dust.filters.h = function(value){return value; }; 我還添加了一個新的過濾器來替換它: dust.filters.esc = function(value){return dust.escapeHtml(value); }; –

回答

0

您可以使用少量記錄的esc雜注將全局上下文應用於模板塊。

{ 
    "hello": "Hello & World" 
} 

{%esc:s} 
    This applies |s to everything inside the pragma 
    {hello} <-- will not escape the ampersand 
{/esc} 

關於第二個問題,它取決於你的助手在做什麼。如果您的助手返回任何類型的塊,例如通過Chunk.render,您必須手動應用過濾器。如果你的助手返回一個值,那麼該值將通過任何存在的filters傳遞。這裏有幾個例子:假設你有一個助手{@val},它只是返回任何傳遞給它的東西,作爲value

返回從你的助手值意味着filters得到尊重:

dust.helpers.val = function(chunk, context, bodies, params) { 
    return params.value; 
}; 

{@val value="Hello & World" /} <-- Hello &amp; World 
{@val value="Hello & World" filters="s" /} <-- Hello & World 

返回從你的助手一大塊忽略filters

dust.helpers.val = function(chunk, context, bodies, params) { 
    return chunk.write(params.value); 
}; 

{@val value="Hello & World" /} <-- Hello & World