Loop infinito ao converter o objeto eliminável em objeto JavaScript simples
Seguindo instruções dadas nodocumentação, Tenho o seguinte modelo de visualização:
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
});
};
};
Quando oself.Save
método é chamado, ocorre um loop infinito. O Chrome realmente informa o erro como:
Não Range RangeError: tamanho máximo da pilha de chamadas excedido
Se eu usarko.mapping.toJS(self)
ao invés deko.toJS(self)
, então eu recebo um erro um pouco mais revelador, mas não há "mensagem" de erro real:
Se eu trocarko.toJS(self)
com algo parecido{ Name: self.Name(), Address: self.Address() /* etc */ }
então tudo funciona bem. Parece que está tentando converter oSave
método e chamando novamente o método como resultado.
Há um bug no KnockoutJS ou há um problema quando estou usando. Eu prefiro o último. Pensamentos?