是否仅支持HTML标记?

时间:2012-08-22 07:27:09

标签: templates escaping dust.js

我正在使用 dustjs 进行前端模板化。    我有json数据    var userData = {'desc':'此内容应显示在HTML SPAN TAG'};

灰尘模板:    {userData.desc}

但是当我尝试渲染此模板时,desc内容在页面上显示为“相同的字符串”,而标记未显示为HTML span。

如果我使用{userData.desc | s | h}:span在页面上显示为< span>

我可以使用的唯一方法是{userData.desc | s}:这个方法将span作为html标签正确显示。但是| | s也会出现脚本标签,这是一种风险。

我想 unescape只有来自json数据内容的HTML标签,有没有办法在dustjs中实现这个要求.. ??

2 个答案:

答案 0 :(得分:0)

唯一可用于禁用自动转义的Dust过滤器是|s,正如您所提到的,如果您的数据中可能包含脚本标记,则不安全。根据{{​​3}}:

  

过滤器不接受参数;如果你需要更复杂的行为,请使用section标签。

虽然文档中从未明确说明如何使用section标记来创建更复杂的过滤器行为,但我相信最可能的解决方案是创建@帮助器。

话虽如此,我想说内置过滤器足以满足大多数用例。如果脚本标记可能进入userData.desc,则不要禁用自动转义。如果您正在使用模板,那么无论如何都应该在模板(而不是JSON)中创建标记。

答案 1 :(得分:0)

你可以创建一个自定义过滤器 - 这比帮助器更适合你的需要。只需使用您自己的自定义代码扩展dust.filter即可。

请参阅我的回答:How do I implement custom rendering logic in dust.js?