我可以将Mustache限制在当前范围内吗?

时间:2015-02-06 14:11:55

标签: mustache

Mustache中是否有办法仅引用当前范围?

{
  "name": "name1",
  "list": [
    {
      "name": "name2",
      "value": 200
    },
    {
      "value": 300
    }
  ]
}

输出:

  • name2:200
  • name1:300

因为它搜索祖先范围 但我需要的是:

  • name2:200
  • 300

有没有办法像这样避免命名空间冲突?
我不想在名称应为空的对象中设置"name": "",因为它是动态创建的。

1 个答案:

答案 0 :(得分:1)

目前无法在符合规范的Mustache中找到您想要的东西。但这并不意味着它是不可能的:)

有几种方法可以做到:

  • a proposed spec extension - 有时称为“锚点符号” - 可以让你写{{ .name }} ...它基本上是隐式迭代器{{ . }}的组合,它指的是当前部分上下文和点表示法{{ foo.name }}。请注意,它尚未添加到许多Mustache实现中,因此这可能对您不起作用,具体取决于您的风格。

  • 如果您的Mustache库实现the proposed filters specs中的任何一个,您可以使用它来防止检查父节上下文。这个答案的可行性很大程度上取决于你的语言。在Ruby中,您可以使用实现#method_missing的代理来完成它。在PHP中,您可以对__isset__get ... Here's an example of that in PHP执行相同操作。

  • 但实际上,最简单的答案是始终在子对象中指定name属性。如果有一个name并且它是一个空字符串,则甚至不会检查父上下文。