dust.js 全局关闭 HTML 编码

dust.js turn off HTML encoding globally

有没有办法在 dust.js 中全局关闭 HTML 编码?我非常信任我的数据,想要在渲染期间将其关闭。不必在每个模板文件中的每个标签中添加“|s”,能够全局设置它是理想的。

如果没有,有没有办法使用自定义助手进行过滤?我创建了一个@val 助手,但无法应用“|s”过滤器。根据文档,以下内容应该有效:

{@val filters="|s" /}

但它不能单独工作,所以我认为需要在助手本身中放置一些逻辑。

您可以使用很少记录的 esc pragma 将全局上下文应用于模板块。

{
  "hello": "Hello & World"
}

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

关于你的第二个问题,这取决于你的助手在做什么。如果您的助手 returns 任何类型的块,例如通过 Chunk.render,您必须手动应用过滤器。如果您的助手 returns 一个值,该值将通过任何存在的 filters 传递。这里有几个例子:假设你有一个助手 {@val} 只是 returns 任何传递给它的东西作为 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