ドキュメントに記載されている手順に従って、次のビューモデルを使用します。
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は実際にエラーを次のように報告します。
Uncaught RangeError:最大呼び出しスタックサイズを超えました
ko.mapping.toJS(self)
の代わりにを使用するとko.toJS(self)
、少しわかりやすいエラーが表示されますが、実際のエラー「メッセージ」は表示されません。
ko.toJS(self)
のようなものと交換すると{ Name: self.Name(), Address: self.Address() /* etc */ }
、すべてが正常に機能します。メソッドを変換しようとしてSave
いて、結果としてメソッドを再呼び出ししているようです。
KnockoutJSにバグがあるか、KnockoutJSの使用方法に問題があります。私は後者を好みます。考え?