1

我很难调试我创建的这个无限循环。在 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/

谢谢大家。

4

1 回答 1

2

因此,当您使用映射插件时,您也需要将其用于toJS调用,因为它创建的视图模型与标准不兼容ko.toJS

您的数据线需要如下所示:

data: ko.mapping.toJS(self),

这是工作小提琴

于 2012-07-27T16:28:05.680 回答