这不起作用的原因是 Dust 中的上下文与您传入的 JSON 不同dust.render
。在内部,Dust 包装了您的 JSON,以便它可以在上下文中包含参数、全局变量和块。
因此,正如您可能假设的那样,您没有添加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}