我有一个特定于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);
答案 0 :(得分:1)
最后,我发现我的$()。ready已创建并应用了KO绑定,在IE的情况下被触发了两次。我正在动态加载一些部分内容。动态加载的页面有一个$()。准备加载KO - 这被IE调用了两次。所以,而不是$()。ready我将它转换为callDocReady函数并在动态加载内容后手动调用它 - 这确保它只调用一次。
抱歉,我认为这是一个KO问题。我发现的另一件事是,如果任何控件绑定到KO并且还需要与jQuery插件(如jquery.numeric.js或jqueryui autocomplete)集成,那么必须在KO绑定之后执行 - 如果之前完成那么那些整合将被覆盖(简而言之,不起作用)
希望有所帮助