使用“as”别名的Foreach绑定在IE9中无法正常工作

时间:2014-12-02 15:08:35

标签: knockout.js internet-explorer-9

我不能让for-each在IE9中正常工作,但是在IE10,IE11中工作

我的方式有什么问题吗?以下代码可用于在IE9中重现该问题:



var vm = {
    MyMessages: [{
        MessageType1: 'A',
        MessageToShow1: 'B '
    }]
};

ko.applyBindings(vm);

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<ul data-bind="foreach: {data: MyMessages, as: 'foo'} "  class="list-unstyled">
    <li>
        <div>
            <a href="#" class="close" data-dismiss="alert">&times;</a>
            <em><label data-bind='text: foo.MessageType1' /></em>
            <label data-bind='text: foo.MessageToShow1' />
        </div>
    </li>
</ul>
&#13;
&#13;
&#13;

我得到的错误是:

  

&#39;富&#39;未定义

1 个答案:

答案 0 :(得分:3)

tl; dr:使用打开和关闭标记写出label标记。

在IE 9模式下渲染时,由于使用了“自动关闭”标记,IE错误地将某些元素错误归类。 label就是这样一个标签。由于处于IE 9模式,它也没有使用标准(HTML5)模式。 IE 10模式将以标准模式呈现它。因此,根据模式,this question表示标签的解释方式不同。

我想在IE 9中,它将标签视为没有结束标签的开放标签,因此将绑定应用于错误的元素。

通过更改标签以使用打开和关闭标签,它似乎可以修复它。

<ul data-bind="foreach: {data: MyMessages, as: 'foo'} "  class="list-unstyled">
    <li>
        <div>
            <a href="#" class="close" data-dismiss="alert">&times;</a>
            <em><label data-bind='text: foo.MessageType1'></label></em>
            <label data-bind='text: foo.MessageToShow1'></label>
        </div>
    </li>
</ul>

http://jsfiddle.net/7c7c0e2m/1/