Knockout.js: Elemento Observablearrays Osservabile non insegnato TypeEerror: Object [Object Global] non ha un metodo "Dissecallback"

StackOverflow https://stackoverflow.com/questions/19848913

Domanda

Sto scrivendo un'app Web facile usando knockout.js ma ho molti problemi a realizzare qualcosa che dovrebbe essere facile, ma non riesco a capire dove sbaglio. Ho un ko.observablearray e lo riempii con i dati JSON da un server REST PHP. Quando aggiungo o rimuovo gli elementi da questo array, l'interfaccia utente si aggiorna bene. Voglio l'interfaccia utente aggiornata anche quando modifico un elemento array. Ho letto che l'elemento dell'array non è osservabile, quindi ho cercato di renderli osservabili ma non funziona. Ecco il codice. (Parti Omissed non considero importante)

function sectionViewModel(){

    var self = this;
    self.sections = ko.observableArray();
            self.sectionToEdit = ko.observable();

        //code to initialize self.sections
    $.getJSON("sections", function(data){
         for(var i = 0; i < data.length ; i++){
             var id = ko.observable(data[i].id);
              var nome = ko.observable(data[i].nome);
             self.sections.push({id:id, nome:nome});
          }
     });



    self.confirmEdit = function(){
        $.ajax({
            url: 'sections/' + self.sectionToEdit().id,
            type: 'PUT',
            data: self.sectionToEdit().nome,
        });
    }

};

var debug = new sectionViewModel();
ko.applyBindings(debug);

Questo codice funziona se non faccio il per interno $ .getjson ma con esso ottengo il seguente errore: Object [Object Global] non ha un metodo "dispositivo" da knockout.js nel momento in cui attivo la funzione confermata. La richiesta put non è nemmeno eseguita e non ho idea del perché. Qualsiasi aiuto è davvero apprezzato, grazie!

È stato utile?

Soluzione

Perché nome è un osservabile, devi scartarlo nella tua funzione:

self.confirmEdit = function(){
    $.ajax({
        url: 'sections/' + self.sectionToEdit().id,
        type: 'PUT',
        data: self.sectionToEdit().nome(),
    });
}

Altrimenti, JQuery tratta l'osservabile come una mappa degli oggetti, inclusa la chiamata di tutte le funzioni sull'oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top