Handlebars If 语句未按预期运行

Handlebars If Statement not behaving as expected

我有以下 json 对象 -

{ 
    "type": "typeOne", 
    "Children": [
          {
             "ChildType": "ChildTypeOne",
             "Settings": {
                  "IsChildTypeOne": true
              }
           },
           {
               "ChildType": "ChildTypeTwo",
               "Settings": {
                    "IsChildTypeTwo": true
                }
           }
     ] 
}

我的车把模板包含以下代码段 -

{{#each Children}}
    {{#if Settings.IsChildTypeOne}}
        ChildTypeOne!!
    {{else}}
        ChildTypeTwo!!
    {{/if}}
{{/each}}

如果我 运行 通过模板获取此数据,唯一呈现的是 ChildTypeTwo!!。因此,if 语句似乎没有正确评估 IsChildTypeOne。奇怪的是,如果我在 else 子句中放入一条语句来显示 IsChildTypeOne 的值,则第一个 ChildType 的值显示为 true。

有没有人知道为什么这没有按预期工作?

注意 - 上面发布的 json 是我实际对象的精简版。真实对象具有嵌套的 Children 数组,这些数组重用相同的对象结构。因此,例如,在我的示例中,ChildTypeOne 也可以有一个包含其他对象的 Childs 数组。

编辑**** 所以在单步执行代码时,我发现如果我的类型定义如下 -

...
"Settings" : {
   "IsChildTypeOne": 'true'
}
...

它似乎有效。删除单引号会导致单步执行时将值读取为未定义。

您可以尝试更改车把模板代码如下:

 {{#Children}}
       {{#if Settings.IsChildTypeOne}}
          ChildTypeOne!!!
       {{else}}
          ChildTypeTwo!!!
       {{/if}}
{{/Children}}

这将迭代您的 Children 数组并给出结果

ChildTypeOne!!! ChildTypeTwo!!!

因为您的 json 有两个元素,一个 ChildTypeOne 为真,另一个不为真。

示例手把:

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{body}}
    {{#Children}}
       {{#if Settings.IsChildTypeOne}}
          ChildTypeOne!!!
       {{else}}
          ChildTypeTwo!!!
       {{/if}}
{{/Children}}
  </div>
</div>

上述模板的 html 输出:

<div class="entry">
  <h1>My New Post</h1>
  <div class="body">
    This is my first post!
          ChildTypeOne!!!
          ChildTypeTwo!!!
  </div>
</div>

可以看到ChildTypeOne了!!!因为第一个元素来了。

鉴于 charrs 的回答似乎没有帮助,而且您的 JSON 比您发布的内容更复杂,也许您的实际模板没有正确引用父上下文?例如,如果你想访问#each children 块中的类型字段,它看起来像这样:

{{#each Children}}
    {{#if Settings.IsChildTypeOne}}
        {{../type}}
    {{/if}}
{{/each}}

这最终与用于将 json 字符串序列化为对象的过程有关。请参阅问题 here 以获得解释。