我有以下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数组。
EDIT **** 因此,在逐步执行代码时,我发现如果我的类型定义如下 -
...
"Settings" : {
"IsChildTypeOne": 'true'
}
...
它似乎工作。删除单引号会导致在单步执行时将值读取为未定义。
答案 0 :(得分:1)
这最终与用于将json字符串序列化为对象的进程相关。有关解释,请参阅问题here。
答案 1 :(得分:0)
您可以尝试更改车把模板代码,如下所示:
{{#Children}}
{{#if Settings.IsChildTypeOne}}
ChildTypeOne!!!
{{else}}
ChildTypeTwo!!!
{{/if}}
{{/Children}}
这将迭代你的孩子数组,并以
给你结果ChildTypeOne !!! ChildTypeTwo !!!
因为你的json有两个元素,其中ChildTypeOne为true而另一个没有。
示例handelbar:
<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 !!!因为第一个元素即将到来。
答案 2 :(得分:0)
鉴于charrs的回答似乎没有帮助,而且你的JSON比你发布的更复杂,也许你的实际模板没有正确引用父上下文?例如,如果您想访问#each children block中的type字段,它将如下所示:
<button onclick='add()'>
add
</button>
<table>
<tr>
<th>content</th>
<th>delete</th>
</tr>
<tbody>
<tr>
<td>Something</td>
<td>
<button onclick='rm()'>
remove
</button>
</td>
</tr>
</tbody>
</table>