2016-07-05 64 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