私はknockout.jsマッピングによってIEで無限の再帰を持っています。KOに精通している人が、私が間違っていることを見つけることができますか?
私は次のknockout.jsマッピングを持っています:
var mapping = {
create: function(options) {
return new MyViewModel(options.data);
},
'ChildItems': {
create: function(options) {
return new ChildVM(options.data);
}
}
}
ページをレンダリングすると約 5つのIEのうち1つは、無限再帰スタックをたどることになります(「SCRIPT28:スタックスペースが不足しています」が発生します)。IEのコールスタック:
fromJS
MyViewModel
create
Anonymous Function
withProxyDependentObservable
createCallback
updateViewModel
fromJS
MyViewModel
create
Anonymous Function
withProxyDependentObservable
createCallback
updateViewModel
...
私のビューモデルコンストラクター:
function MyViewModel(data) {
var self = this;
this.$type = 'MyViewModel';
[some observables]
...
ko.mapping.fromJS(data, mapping, this);
}
ビューモデルの初期化は、jsonエンドポイントを呼び出すことによって行われます。
$.ajax({
url: 'http://my.end/point',
type: 'POST',
data: JSON.stringify(payload),
contentType: 'application/json; charset=utf-8',
success: function(data) {
window.vm = ko.mapping.fromJS(data, mapping);
ko.applyBindings(window.vm)
}
});