按照文档中给出的说明,我有以下视图模型:
var newContactViewModel = function () {
var self = this;
self.Name = ko.observable();
self.Address = ko.observable();
self.City = ko.observable();
self.State = ko.observable();
self.PostalCode = ko.observable();
self.Save = function () {
$.ajax({
type: "POST",
url: "/contact",
data: ko.toJS(self), //infinite loop here
success: state.OnSaved
});
};
};
调用该self.Save
方法时,会发生无限循环。Chrome 实际上将错误报告为:
未捕获的 RangeError:超出最大调用堆栈大小
如果我使用ko.mapping.toJS(self)
而不是ko.toJS(self)
,那么我会得到一个稍微更具启发性的错误,但没有真正的错误“消息”:
如果我ko.toJS(self)
用类似的东西换掉{ Name: self.Name(), Address: self.Address() /* etc */ }
,那么一切正常。似乎它正在尝试转换Save
方法并因此重新调用该方法。
KnockoutJS 中存在错误,或者我使用它时存在问题。我更喜欢后者。想法?