dust js:别名对象无效

时间:2013-06-09 00:56:07

标签: dust.js

模板

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

输出符合预期。请告诉我如何为对象添加别名

1 个答案:

答案 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}