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

Javascript Knockoutjs观察嵌套对象并订阅更改,javascript,knockout.js,Javascript,Knockout.js,看看敲除js和映射插件。 我注意到,如果我传递一个对象,我就不能订阅它以进行更改。 基本上,如果对象的任何成员发生更改,我希望得到通知。我真的不在乎 要获取已更改的属性(但如果可能的话,希望知道如何恢复) 但是,如果我传递一个包含对象的数组,它就会工作 我看到在将对象传递给fromJS时,返回的对象没有subscribe方法 有没有办法解决这个问题 谢谢假设您希望订阅者在每次更新事件时(包括第一次设置事件时)都触发该事件。你可以试试这个 function EventsKoModel(data){

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

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


谢谢

假设您希望订阅者在每次更新
事件时(包括第一次设置事件时)都触发该事件。你可以试试这个

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

假设您希望订阅者在每次更新
事件时(包括第一次设置事件时)触发。你可以试试这个

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

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

以下是它的链接:


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

以下是它的链接:


从服务器获取数据后,第一次触发事件,但不是在我更新映射时触发。当我得到数据时,我使用ko.mapping.fromJS(数据,self)确定它是否有效。我的错。但是请给我解释一下。即使未更新事件属性,也会触发事件?因为,在上面的示例中,self.event在这种情况下永远不会更改,
self.event
是一个可观察的
对象,其值是一个普通对象(碰巧它包含一些
可观察对象,但这并不重要。因此,对对象本身的任何更改都会触发订阅,而对对象属性的任何更改都是对对象的更改。感谢您的解释。有没有办法找到嵌套对象中哪个属性发生了更改d?从服务器获取数据后,第一次触发事件,但不是在我更新映射时触发。我使用ko.mapping.fromJS(data,self)当我得到数据OK时,它工作了。我的不好。但是请向我解释一下。即使事件属性没有更新,事件也会被触发?因为在上面的示例中,self.event永远不会更改。在这种情况下,
self.event
是一个可观察的
对象,其值是一个普通对象(碰巧它包含一些
可观察对象,但这并不重要。因此,对对象本身的任何更改都会触发订阅,而对对象属性的任何更改都是对对象的更改。感谢您的解释。有没有办法找到嵌套对象中哪个属性发生了更改D