Ractive.js,缺少值并嵌套

时间:2018-03-16 20:50:40

标签: javascript ractivejs

我有一个相当庞大,深度和多样化的数据模型,无法保证它包含与否。对于不在任何地方领先的密钥路径,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}}来检查每一个评估都是极其痛苦的。

0 个答案:

没有答案