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?

Était-ce utile?

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
scroll top