1

我有以下 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 也可以有一个 Childrens 数组,其中包含其他对象。

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

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

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

4

3 回答 3

1

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

{{#each Children}}
    {{#if Settings.IsChildTypeOne}}
        {{../type}}
    {{/if}}
{{/each}}
于 2016-04-23T23:17:08.223 回答
1

这最终与用于将 json 字符串序列化为对象的过程有关。请在此处查看问题以获取解释。

于 2016-04-29T14:10:49.183 回答
0

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

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

这将迭代您的 Children 数组并为您提供结果

子类型一!!!子类型二!!!

由于您的 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 !!!因为第一个元素来了。

于 2016-04-22T18:46:41.747 回答