对使用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 ..
答案 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