在最简单的情况下,您只需直接订阅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。
在更新的小提琴中看到这一点。