以下内容在IE8中失败,但在实际浏览器中有效
<div data-bind="with: currentItem, visible: currentItemState() === 'view'">
<!-- ko if: resource().versions().length -->
<!-- ko with: resource().versions()[0] -->
<div style="margin-top: 15px;" data-bind="visible: error()">
.....
<!-- /ko -->
<!-- /ko -->
基本上我得到了property 'error' is null or undefined
这意味着with
(和if
)绑定无法正常工作。 这可能是因为IE8正在剥离注释,我已经看到它在其他上下文中这样做,例如在<select>
节点中,但我从未见过它在这样的地方这样做。
有没有解决这个问题的好方法(无需通过更改我的 html 结构来解决问题)?
大多数时候,当我遇到这个问题时,它不是归结为淘汰而是 HTML。诸如没有正确关闭标签之类的事情,例如有一个自我关闭的<label />
破坏了它。
IE8对这个东西非常讲究。我有一个地方,由于标签问题,它没有渲染<!-- ko if -->
的下半部分
将第二个无容器绑定包装在空div 中,以便在所有浏览器中正确解析它
<div data-bind="with: currentItem, visible: currentItemState() === 'view'">
<!-- ko if: resource().versions().length -->
<div>
<!-- ko with: resource().versions()[0] -->
<div style="margin-top: 15px;" data-bind="visible: error()">
<!-- /ko -->
</div>
<!-- /ko -->
</div>
我不确定是否有适当的方法来解决这个问题,但事实证明,如果 with*ed* 值未定义,则 KNOCKOUT 的with
绑定足够智能,根本不渲染节点。 因此,将这两个伪绑定替换为
<div data-bind="with: resource().versions()[0]">
似乎可以解决问题。