KnockoutJS: ko.ToJSON (esto) no funciona?
-
27-10-2019 - |
Pregunta
El siguiente script java que define el objeto MyViewModel con una propiedad " texto " y una función " guardar ".
<script type="text/javascript">
function MyViewModel() {
this.text = ko.observable('');
}
MyViewModel.prototype.save = function () {
alert(this.text()); // Works fine
var data = ko.ToJSON(this); // Error: Object doesn't support this property or method ?
$.ajax({
type: 'POST',
url: '/Person/Save',
data: data,
contentType: 'application/json',
success: function (data) {
alert(data);
}
});
};
</script>
<script type="text/javascript">
$(function () {
var viewModel = new MyViewModel()
ko.applyBindings(viewModel);
});
</script>
Y el siguiente botón definido:
<button data-bind="click: save">SAVE</button>
Resultado cuando se hace clic en el botón:
- El acceso a una propiedad con this.text () funciona bien
- Convertir el objeto de script java en un objeto JSON: ko.ToJSON (esto) no funciona y arroja un error: "Error: el objeto no admite esta propiedad o método "
Probablemente falta algo trivial o está mal, pero no puedo verlo.¿Algún consejo?
Solución
Knockout no tiene un método ToJSON
, aunque sí tiene un método toJSON
:
function MyViewModel() {
this.text = ko.observable('');
}
MyViewModel.prototype.save = function () {
alert(this.text()); // Works fine
var data = ko.toJSON(this); // Works fine too
$.ajax({
type: 'POST',
url: '/Person/Save',
data: data,
dataType: 'json',
success: function (data) {
alert(data);
}
});
};
Otros consejos
Ha definido su modelo de vista como una función (una clase, si lo desea):
function MyViewModel() {
this.text = ko.observable('');
}
En su lugar, debe definirlo como var (un objeto):
var MyViewModel = {
text: ko.observable('');
}
Debería encontrar que lo siguiente funciona bien:
var data = ko.ToJSON(MyViewModel);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow