我有一个相当庞大,深度和多样化的数据模型,无法保证它包含与否。对于不在任何地方领先的密钥路径,Ractive通常非常冷静,只需将它们评估为undefined
,这样就可以轻松设置默认值:
r = new Ractive({
template: '#template',
el: '#el',
data: {
foo: {
ok: {
bar: "okay",
},
},
}
})
<script src="https://cdn.jsdelivr.net/npm/ractive"></script>
<script id="template" type="text/ractive">
{{#with {
ok: foo.ok.bar || "not found",
notok: foo.notok.bar || "not found"
} }}
OK: {{ok}}
<br>
NotOK: {{notok}}
{{/with}}
</script>
<div id="el"></div>
但是添加另一层间接,整个事情就分崩离析了:
r = new Ractive({
template: '#template',
el: '#el',
data: {
foo: {
ok: {
bar: "okay",
},
},
}
})
<script src="https://cdn.jsdelivr.net/npm/ractive"></script>
<script id="template" type="text/ractive">
{{#with {
okKey: "ok",
notokKey: "notok"
} }}
{{#with {
ok: foo[okKey].bar || "not found",
notok: foo[notokKey].bar || "not found"
} }}
OK: {{ok}}
<br>
NotOK: {{notok}}
{{/with}}
{{/with}}
</script>
<div id="el"></div>
整个with
部分无法呈现,控制台会收到警告:
无法计算@ {ok:foo [@ {okKey:“ok”,notokKey:“notok”}。okKey] .bar ||“not found”,notok:foo [@ {okKey:“ok”, notokKey:“notok”}。notokKey] .bar ||“not found”}:无法读取未定义的属性“bar”
这是一个错误,还是一个想要的行为?有办法解决它吗?我的路径很深,用{{#if bar in foo}}{{#if baz in foo[bar]}}{{#if quux in foo[bar][baz]}} {{foo[bar][baz][quux]}} {{/if}}{{/if}}{{/if}}
来检查每一个评估都是极其痛苦的。