문제

제가 만든 이 무한 루프를 디버깅하는 데 어려움을 겪고 있습니다.Knockout.js에서는 다음을 사용하여 몇 가지 요소의 변경 이벤트를 바인딩했습니다. data-bind="event:{change:save_data}" 마크업.그런 다음 save_data 함수를 사용하여 서버에 Ajax PUT을 실행했습니다.

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 호출의 무언가가 필드 값 중 하나를 변경하고 있습니다.해결 방법은 AJAX 호출이 이미 경로에 있는지 감지하고 호출하지 않는 것입니다. 그러나 무슨 일이 일어나고 있는지 이해하고 싶습니다.

내 바이올린은 다음과 같습니다.

손상된 예:http://jsfiddle.net/btV9t/10/

실제 사례:http://jsfiddle.net/btV9t/8/

모두 감사합니다.

도움이 되었습니까?

해결책

따라서 매핑 플러그인을 사용할 때는 이를 다음 용도로 사용해야 합니다. toJS 호출도 가능합니다. 표준과 호환되지 않는 뷰 모델을 생성하기 때문입니다. ko.toJS.

데이터 라인은 다음과 같아야 합니다:

data: ko.mapping.toJS(self),

여기는 일하는 바이올린

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top