Domanda

Dare un'occhiata a Knockout JS e al plug -in di mappatura. Ho notato che se passo un oggetto, non posso iscriverlo per le modifiche. Fondamentalmente, voglio essere avvisato se un membro dell'oggetto cambia. Non mi interessa davvero recuperare l'attributo che è cambiato (ma se è possibile vorrebbe sapere come)

function EventsKoModel(data){
    var self = this;
    self.event = ko.mapping.fromJS(data);
   //the below throws Error 
    //TypeError: self.event.subscribe is not a function
    self.event.subscribe(function(){
       console.log("something changed");
     });
}

var data = {
    'id': 14124124124124,
    'name': 'Some Event',
    'events': [{
       'id': 1
     },{
        'id': 2
      }]
}
var d = new EventsKoModel(data);
ko.applyBindings(d);

Tuttavia, se passo un array con oggetti, funziona ho visto che quando passano un oggetto a Fromjs, l'oggetto restituito non ha un metodo di iscrizione, c'è comunque per aggirare questo?

Grazie

È stato utile?

Soluzione

Supponendo che tu voglia che l'abbonato si accenda ogni volta event viene aggiornato, inclusa la prima volta che viene impostato. Potresti provare questo;

function EventsKoModel(data){
    var self = this;
    self.event = ko.observable();
    self.event.subscribe(function(){
        console.log("something changed");
    });
    ko.mapping.fromJS(data, {}, self);
}

Altri suggerimenti

Ho avuto gli stessi requisiti qualche tempo fa e ho scritto Knockout Reactor per questo. Fa un buon lavoro nel sottoscrivere modelli gerarchici e fornisce la maggior parte delle funzionalità di cui potresti aver bisogno per farti andare subito.

Ecco il link ad esso:

https://github.com/ziadj/knockoutjs-reactor

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