作成したこの無限ループのデバッグに苦労しています。Knockout.jsでは、data-bind="event:{change:save_data}"
マークアップを使用していくつかの要素の変更イベントをバインドしました。次に、save_data
関数で、サーバーに対してajaxPUTを実行します。
var ViewModel = function(config) {
var self = this;
// initial call to mapping to create the object properties
ko.mapping.fromJS(config, {}, self);
self.save_data = function() {
$('#ajax-console').append('<p>Saving...</p>');
$.ajax({
url: '/echo/json/',
data: ko.toJS(self),
type:'put',
success: function(data) {
},
dataType: 'json'
});
}
};
これを実行し、入力またはチェックボックスのいずれかを変更すると、Chromeで次のエラーが発生しますRangeError: Maximum call stack size exceeded
。
私は何が間違っているのですか?明らかに、AJAX呼び出しの何かがフィールドの値の1つを変更しています。回避策は、AJAX呼び出しがすでにルーティング中であるかどうかを検出し、それを呼び出さないことですが、何が起こっているのかを理解したいと思います。
これが私のフィドルです:
壊れた例: http: //jsfiddle.net/btV9t/10/
実例: http: //jsfiddle.net/btV9t/8/
皆さんありがとう。