与IE的KO(knockoutjs)数据绑定问题

时间:2013-05-23 18:03:47

标签: internet-explorer knockout.js model-binding

我有一个特定于IE的奇怪问题(我已经检查了多个版本,从IE8,9& 10开始),我的模型记录成倍增加 (即如果我有2条记录,它显示2X2 = 4,如果3则则3X3 = 9)。我有一个简单的Grid,它与我的viewModel绑定,我在加载页面后通过getJson获取它。这是代码片段(更多的是我保持最小化) -

function createCommentsKO(){
    $.getJSON('http://www.tempSite.com/getMyjson',
        function (data) {
            ...
            viewModelComments.allComments = ko.mapping.fromJS(data.AllComments);
            ...
            ko.applyBindings(viewModelComments, document.getElementById("divComments"));
    });

在网格中,我会像 -

那样迭代
<div id="divComments">
...
<table>
<thead>...</thead>
<tbody data-bind="foreach: allComments">
    <tr data-bind="attr:{className:_Deleted()?'deletedTR':'deletedTR_NO'}">
        <td nowrap="nowrap">
        <span data-bind='text:Comment'></span>
        ...
       </td>
   </tr>
</tbody>
</table>
...
</div>

这怎么可能?为什么IE会增加我的模型记录,它在Firefox中完美呈现。任何线索?


更多信息 - 这里viewModelComments.allComments是一个绑定到网格的Observable数组。我返回的json结果是一个带有数组和其他一些对象的JSON对象。 我将实现分开了一小部分,并尝试了以下显示正确结果 -

 viewModelComments.allComments(data.AllComments);

它与以下内容有何不同:(顺便说一下,我需要对象数组中的每个元素都可以观察以供进一步使用)

 viewModelComments.allComments = ko.mapping.fromJS(data.AllComments);

1 个答案:

答案 0 :(得分:1)

最后,我发现我的$()。ready已创建并应用了KO绑定,在IE的情况下被触发了两次。我正在动态加载一些部分内容。动态加载的页面有一个$()。准备加载KO - 这被IE调用了两次。所以,而不是$()。ready我将它转换为callDocReady函数并在动态加载内容后手动调用它 - 这确保它只调用一次。

抱歉,我认为这是一个KO问题。我发现的另一件事是,如果任何控件绑定到KO并且还需要与jQuery插件(如jquery.numeric.js或jqueryui autocomplete)集成,那么必须在KO绑定之后执行 - 如果之前完成那么那些整合将被覆盖(简而言之,不起作用)

希望有所帮助