KnockoutJS: ko.ToJSON (cela) ne fonctionne pas?
-
27-10-2019 - |
Question
Le java-script suivant qui définit l'objet MyViewModel avec une propriété " text " et une fonction " Enregistrer ".
<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>
Et défini le bouton suivant:
<button data-bind="click: save">SAVE</button>
Résultat lorsque le bouton est cliqué:
- Accès à une propriété à l'aide this.Text () fonctionne très bien
- Conversion l'objet java-script à un objet JSON: ko.ToJSON (ce) ne fonctionne pas et jette une erreur: « Erreur: Cet objet ne gère pas cette propriété ou méthode "
Probablement quelque chose de trivial est manquant ou mal, mais je ne peux pas le voir. Des conseils?
La solution
Knockout n'a pas une méthode de ToJSON
- il a une méthode toJSON
si :
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);
}
});
};
Autres conseils
Vous avez défini votre modèle de vue en fonction (une classe, si vous le souhaitez):
function MyViewModel() {
this.text = ko.observable('');
}
Au lieu de cela, vous devez définir comme un var (un objet):
var MyViewModel = {
text: ko.observable('');
}
Vous devriez alors constater que ce qui suit fonctionne très bien:
var data = ko.ToJSON(MyViewModel);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow