KnockoutJS: ko.ToJSON (questo) non funziona?
-
27-10-2019 - |
Domanda
Il seguente java-script che definisce l'oggetto MyViewModel con una proprietà " text " e una funzione " save ".
<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>
E il seguente pulsante definito:
<button data-bind="click: save">SAVE</button>
Risultato quando si fa clic sul pulsante:
- L'accesso a una proprietà utilizzando this.text () funziona bene
- Conversione dell'oggetto java-script in un oggetto JSON: ko.ToJSON (questo) non funziona e genera un errore: "Errore: l'oggetto non supporta questa proprietà o metodo "
Probabilmente manca qualcosa di banale o è sbagliato, ma non riesco a vederlo.Eventuali suggerimenti?
Soluzione
Knockout non ha un metodo ToJSON
, ma ha un metodo 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);
}
});
};
Altri suggerimenti
Hai definito il tuo modello di visualizzazione come una funzione (una classe, se lo desideri):
function MyViewModel() {
this.text = ko.observable('');
}
Invece, dovresti definirlo come un var (un oggetto):
var MyViewModel = {
text: ko.observable('');
}
Dovresti quindi scoprire che quanto segue funziona bene:
var data = ko.ToJSON(MyViewModel);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow