2012-06-06 8 views
16

Voglio costruire un client per il mio servizio REST utilizzando Knockout.js. Ho molti Repositor che voglio accedere tramite diversi URL - così ho trovato questa soluzione usando il Pattern di Revealing-Prototype. Il mio problema: Non riesco a trovare il modo di mappare la proprietà Items con i miei "dati" che ricevo dal mio servizio.Knockout.js che mappano un JSON in un array osservabile

var Repository = function (url) { 
    this.Url = url; 
    this.Items = ko.observableArray([]); 
    this.PendingItems = ko.observableArray([]); 
}; 

Repository.prototype = function() { 
    var 
     getAllItems = function() { 
      var self = this; 
      $.getJSON(self.Url, function (data) { 
      // data=[{"Id":1,"Name":"Thomas","LastName":"Deutsch"},{"Id":2,"Name":"Julia","LastName":"Baumeistör"}] 
       ko.mapping.fromJS(data, self.Items); 
      }); 
     }, 
    ... 


// i call it like this: 
customerRepository = new Repository('http://localhost:9200/Customer'); 
customerRepository.getAllItems(); 

Credo che il problema è in questo: ko.mapping.fromJS (dati, self.Items); ma non riesco a trovare il modo giusto per farlo.
Domanda: cosa sto facendo di sbagliato? ho trovato un esempio - e stanno facendo lo stesso penso: http://jsfiddle.net/jearles/CGh9b/

risposta

28

Credo che la versione a due argomenti di fromJS sia utilizzata solo per gli oggetti che sono stati precedentemente mappati, cioè avevano un oggetto implicito di opzioni di mappatura vuote. Dal momento che la mappatura è la prima volta che è stata eseguita, è necessario che fornisca tale oggetto di opzioni vuoto in questo modo.

ko.mapping.fromJS(data, {}, self.Items); 

http://jsfiddle.net/madcapnmckay/j7Qxh/1/

Spero che questo aiuti.

+1

Per il riferimento di tutti, il letterale dell'oggetto vuoto medio in questo esempio è un segnaposto vuoto per l'oggetto delle opzioni di mappatura. – pimbrouwers

Problemi correlati