1

模板

{#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}

输出符合预期。请让我知道如何给对象起别名

4

1 回答 1

1

这不起作用的原因是 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}
于 2013-06-13T20:46:38.923 回答