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

时间:2013-12-03 14:09:52

标签: javascript knockout.js

看一下knockout 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);

但是,如果我传递一个带有对象的数组,它就可以了 我看到当将对象传递给fromSS时,返回的对象没有subscribe方法 无论如何要解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:1)

假设您希望订阅者每次更新event时都会触发,包括第一次设置。你可以试试这个;

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

答案 1 :(得分:0)

我前段时间有相同的要求并为此编写了Knockout Reactor。它在订阅分层模型方面做得很好,并提供了您可能需要的大部分功能,以便您立即开始使用。

以下是指向它的链接:

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