模板
{#person alias=root}{alias.value}: {name}, {age}{/person}
数据:
{
"root": {value:"MR."},
"person": {
"name": "Larry",
"age": 45
}
}
预期产出:
MR. Larry, 45
实际输出:
: Larry, 45
我正在尝试为上面显示的对象设置别名。但它不起作用。请查看这个小提琴http://jsfiddle.net/G86mu/1/。
如果我用{value:"MR."}
字符串替换"root":"Mr."
并将模板更改为
{#person alias=root}{alias}: {name}, {age}{/person}
输出符合预期。请告诉我如何为对象添加别名
答案 0 :(得分:1)
这不起作用的原因是因为Dust中的上下文与您传递给dust.render
的JSON不同。在内部,Dust包装你的JSON,以便在上下文中包含params,globals和blocks。
因此,您可能没有将alias
添加到当前上下文中。相反,您要在当前上下文之上添加alias
一级。虽然表示不完全准确,但它应该有助于解释:
// Incorrect:
{
"root": {
"value": "MR."
},
"person": {
// Current context
"alias": {
"value": "MR."
},
"name": "Larry",
"age": "45"
}
}
// (more) correct:
{
"root": {
"value": "MR."
},
"alias": {
"value": "MR."
"person": {
// Current context
"name": "Larry",
"age": "45"
}
}
}
当以这种方式查看上下文时,为什么{#person alias=root}{alias.value}: {name}, {age}{/person}
不起作用是有道理的。当在引用中使用点符号时(如在{alias.value}
中,灰尘在当前上下文中开始并且向下。由于当前上下文中没有“别名”对象,灰尘放弃,你得到一个空字符串。
但是,如果不使用点符号,灰尘将从当前上下文开始并向上搜索。第一次找到匹配时,它将使用该匹配。因此,对于您的示例,您可以使用以下内容来获得预期的输出。
{#person alias=root}{#alias}{value}{/alias}: {name}, {age}{/person}
或者,如果您可以使用:
{#person aliasVal=root.value}{aliasVal}: {name}, {age}{/person}