0

以 Handlebars Cookbook 为例材料...

数据:

{
  "foo": {
    "bar": {
      "moo": "No"
    }
  },
  "moo": "Yes!"
}

模板:

{{#foo.bar}}
{{../moo}}
{{/foo.bar}}

预期输出:

Yes!

这对我来说似乎是错误的,我希望有人可以帮助我解决这个问题。

如果 Handlebars 在第一次查找“foo.bar”时向下导航上下文,则块内的上下文应该是 bar 或{"moo":"No"}. 事实上,它似乎是。如果我放入{{moo}}块体,我会看到“否”作为输出。

因此,“..”上升 1 级到上下文 foo, 似乎是合乎逻辑的{"bar":{"moo","No"}}。“foo”对象中没有“moo”。获得“是!”的逻辑/预期方式 将使用{{../../moo}},但这不是它的工作方式。

这里的逻辑是什么?

4

1 回答 1

0

我想我明白了。我假设(错误地)Handlebars 将每个路径组件解析为一个上下文:Context[foo] -> Context[bar]. 它似乎不是这样工作的。而是它创建Context[foo.bar]. 所以“..”确实是根,所以“../moo”是“是的!”。

不是编程意义上的路径堆栈,而是块上下文的堆栈/历史。

于 2019-05-15T01:17:38.530 回答