Pregunta

Echar un vistazo a Knockout JS y el complemento de mapeo. Noté que si paso un objeto, no puedo suscribirme a él para los cambios. Básicamente, quiero ser notificado si algún miembro del objeto cambia. Realmente no me importa recuperar el atributo que cambió (pero si es posible, me gustaría saber cómo)

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

Sin embargo, si paso una matriz con objetos, funciona, vi que al pasar un objeto a Fromjs, el objeto devuelto no tiene un método de suscripción, ¿de todos modos funciona?

Gracias

¿Fue útil?

Solución

Suponiendo que desee que el suscriptor dispare cada vez que el event se actualiza, incluida la primera vez que se establece. Podrías probar esto;

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

Otros consejos

Tenía los mismos requisitos hace un tiempo y escribí el reactor Knockout para esto. Hace un buen trabajo para suscribirse a modelos jerárquicos y proporciona la mayor parte de la funcionalidad que puede necesitar para que vaya de inmediato.

Aquí está el enlace a él:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top