DustJS:从上下文中逃脱输入

时间:2013-07-11 20:27:32

标签: dust.js

对使用dust.js进行一些调查,我想知道是否有办法防止坏数据被渲染。

模板

Hello {name}! You have {count} new messages

上下文

{
   "name": "Mick",
   "count": Math.PI
}

收益率,这个结果:

Hello Mick! You have 3.141592653589793 new messages

在这个例子中,有没有办法逃避Math.PI,这样我们就可以纾困而不打印3.14 ..

1 个答案:

答案 0 :(得分:1)

作为开发人员,您必须决定什么是错误数据'什么是可接受的替代方案。

然后你必须在它到达dust.js之前在代码中转换它(例如构建页面的node.js),或者write a helper通过适当的回退来渲染任何你想要的东西。例如,如果你想渲染整数,并显示一些自定义后备文本,你可以使用这样的帮助:

创建 integerOrElse 函数,并将其保存在文件中,例如

本地防尘helpers.js

// this extends dustjs-helpers (which must therefore be in package.json)
var dust = require('dustjs-helpers');

dust.helpers.integerOrElse = function (chunk, ctx, bodies, params) {
  // tap function resolves variables in params
  var value = dust.helpers.tap(params.value, chunk, ctx),
  fallback = dust.helpers.tap(params.fallback, chunk, ctx) || '';
  // define a fallback for the fallback :) ----------------^^^^^

  // for more brevity, you could do this in one line with a ternary operator
  if (!isNaN(value) && parseInt(value) == value) {
    return chunk.write(value);
  } else {
    return chunk.write(fallback);
  }
}

然后在您的应用中require(),替换您称之为vanilla dust.js的地方:

app.js

...
var dust  = require('./local-dust-helpers');
...

然后,您可以像使用native dust.js指令一样使用它:

template.dust

Hello {name}!
You have {@integerOrElse value='{count}' fallback='some' /} new messages