0

以下在 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 结构来解决问题)?

4

3 回答 3

1

大多数时候,当我遇到这种情况时,不是淘汰赛而是 HTML。诸如未正确关闭标签之类的事情,例如自我关闭<label />将其破坏。

IE8 对这个东西很讲究。<!-- ko if -->由于标签问题,我有一个地方没有渲染 a 的下半部分

于 2013-10-25T14:53:55.327 回答
0

我不确定是否有适当的方法来解决这个问题,但事实证明,with如果 with*ed* 值未定义,则淘汰赛的绑定足够智能,根本不会渲染节点。因此,将这两个伪绑定都替换为

<div data-bind="with: resource().versions()[0]">

似乎可以解决问题。

于 2013-10-24T20:53:19.100 回答
0

将第二个无容器绑定包装在一个空 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>
于 2013-10-24T20:41:11.943 回答