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 以获得解释。
我有以下 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 以获得解释。