0

我有一个特定于 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"));
    });

在网格中,我像这样迭代 witnin -

<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);
4

1 回答 1

1

最后发现我的 $().ready 创建和应用 KO 绑定在 IE 的情况下被触发了两次。我正在动态加载一些部分内容。动态加载的页面有一个 $().ready to load KO - 这被 IE 调用了两次。因此,我没有将 $().ready 转换为 callDocReady 函数,并在动态加载内容后手动调用它——这确保了它只被调用一次。

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

希望能帮助到你

于 2013-05-31T08:09:08.503 回答