在最简单的情况下,您只需直接订阅property3. 假设一个视图模型是这样的:
var reality = {
    dreamLevel1: ko.observable({
        dreamLevel2: ko.observable({
            dreamLevel3: ko.observable("some value")
        })
    })
};
然后,您可以订阅一些普通的 javascript 来更改 property3,如下所示:
reality.dreamLevel1().dreamLevel2().dreamLevel3.subscribe(function(newVal) {
    document.getElementById('proofOfConcept').innerHTML += "\n" + newVal
});
有关我的意思的演示,请参阅this fiddle 。
当然,如果property2或property1更改,您需要重新订阅。您可以分解出要在订阅上执行的代码:
function lvl3Subscription(newVal) {
    document.getElementById('proofOfConcept').innerHTML += "\n" + newVal
}
然后直接订阅这个初始的 3 级属性:
reality.dreamLevel1().dreamLevel2().dreamLevel3.subscribe(lvl3Subscription);
以及 2 级属性:
reality.dreamLevel1().dreamLevel2.subscribe(function(newDream) {
    newDream.dreamLevel3.subscribe(lvl3Subscription); 
});
等等。现在,如果级别 2 发生更改,因此级别 3 变得完全不同,自定义 Javascript 代码仍将订阅新的级别 3 observable。
在更新的小提琴中看到这一点。