在IE8中KnockoutJS伪绑定失败

时间:2013-10-24 20:35:50

标签: javascript knockout.js internet-explorer-8

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

3 个答案:

答案 0 :(得分:1)

大多数时候,当我遇到这个问题时,除了HTML之外,它还没有被淘汰出局。没有正确关闭标签的事情,例如自动关闭<label />会破坏它。

IE8非常讲究这个东西。由于标签问题,我有一个地方没有呈现<!-- ko if -->的下半部分

答案 1 :(得分: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>

答案 2 :(得分:0)

我不确定是否有正确的解决方法,但事实证明,如果with * ed *值未定义,则敲除with绑定足够智能,根本不能渲染节点。所以用

替换那些伪绑定的两个
<div data-bind="with: resource().versions()[0]">

似乎可以解决问题。