IE に固有の奇妙な問題があります (IE8、9、および 10 で始まる複数のバージョンを確認しました)、モデル レコードが乗算 されます (つまり、2 つのレコードがある場合は 2X2 = 4 と表示され、3 の場合は 4 と表示されます)。 3X3 = 9) . ページをロードした後に getJson を介してフェッチする viewModel にバインドする単純な Grid があります。これがコードスニペットです(最小限に抑えたものは他にもあります)-
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);