Frage

Einen Blick auf Knockout JS und das Mapping -Plugin. Mir ist aufgefallen, dass ich es nicht für Änderungen abonnieren kann, wenn ich ein Objekt bestehe. Grundsätzlich möchte ich benachrichtigt werden, wenn sich ein Mitglied des Objekts ändert. Es ist mir nicht wirklich wichtig, das Attribut, das sich geändert hat, zurückzubekommen (aber wenn es möglich ist, würde ich gerne wissen, wie)

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);

Wenn ich jedoch ein Array mit Objekten übergeben habe, hat ich gesehen, dass das zurückgegebene Objekt bei der Übergabe eines Objekts an JSOW keine Abonnementmethode hat, um dies zu umgehen?

Vielen Dank

War es hilfreich?

Lösung

Angenommen, Sie möchten, dass der Abonnent jedes Mal abfeuert event wird aktualisiert, einschließlich beim ersten Mal eingestellt. Sie könnten das versuchen;

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

Andere Tipps

Ich hatte vor einiger Zeit die gleichen Anforderungen und schrieb dafür den Knockout -Reaktor. Es macht einen guten Job beim Abonnieren hierarchischer Modelle und bietet den größten Teil der Funktionalität, die Sie möglicherweise benötigen, um Sie sofort in Gang zu bringen.

Hier ist der Link dazu:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top