Knockoutjs观察嵌套对象并订阅更改

Knockoutjs observe nested object and subscribe for changes

本文关键字:观察 嵌套 对象 Knockoutjs      更新时间:2024-03-07

了解敲除js和映射插件。我注意到,如果我传递一个对象,我就无法订阅它进行更改。基本上,如果对象的任何成员发生更改,我都希望得到通知。我真的不在乎以恢复更改的属性(但如果可能的话,我想知道如何)

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

但是,如果我传递一个带有对象的数组,它会起作用我看到在将对象传递给fromJS时,返回的对象没有subscribe方法有办法解决这个问题吗?

感谢

假设您希望订阅服务器在每次更新event(包括第一次设置)时激发。你可以试试这个;

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

我不久前也有同样的要求,并为此编写了Knockout Reactor。它在订阅分层模型方面做得很好,并提供了您可能需要的大部分功能,以便立即启动。

这是它的链接:

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