1

作成したこの無限ループのデバッグに苦労しています。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/

皆さんありがとう。

4

1 に答える 1

2

したがって、マッピングプラグインを使用する場合はtoJS、標準と互換性のないビューモデルを作成するため、呼び出しにも使用する必要がありますko.toJS

データラインは次のようになっている必要があります。

data: ko.mapping.toJS(self),

これが作業中のフィドルです

于 2012-07-27T16:28:05.680 に答える