Question

Avoir un coup d'œil à Knockout JS et au plugin de cartographie. J'ai remarqué que si je passe un objet, je ne peux pas l'abonner à des modifications. Fondamentalement, je veux être informé si un membre de l'objet change. Je ne me soucie pas vraiment de récupérer l'attribut qui a changé (mais si c'est possible, je voudrais savoir comment)

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

Cependant, si je passe un tableau avec des objets, cela fonctionne, j'ai vu que lors de la transmission d'un objet à Fromjs, l'objet retourné n'a pas de méthode d'abonnement est là de toute façon pour contourner cela?

Merci

Était-ce utile?

La solution

En supposant que vous voulez que l'abonné tire à chaque fois le event est mis à jour, y compris la première fois qu'il est défini. Vous pouvez essayer ceci;

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

Autres conseils

J'avais les mêmes exigences il y a quelque temps et j'ai écrit un réacteur à élimination directe pour cela. Il fait du bon travail pour vous abonner à des modèles hiérarchiques et fournit la plupart des fonctionnalités dont vous pourriez avoir besoin pour vous faire aller tout de suite.

Voici le lien vers celui-ci:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top