我有一个大型的淘汰视图模型,它是一个JSON表示:
...
existingPlans: {
startDate: "2014-11-01",
endDate: "2017-03-01",
plans: [
{
"customTitle": "plan 1 name",
"monthlyPayments": [ 15000, 15000, 15000, 15000, 15000, 15000 ],
"futureBalance": [ 90000, 75000, 60000, 45000, 30000, 15000 ]
},
{
"customTitle": "plan 2 name",
"monthlyPayments": [ 7000, 7000, 7000, 7000 ],
"futureBalance": [ 28000, 21000, 14000, 7000 ]
}
]
}
...
StartDate和endDate是observables,plan是observableArray。 我想要做的是创建一个绑定,当这三个可观察者中的任何一个在" existingPlans"的级别上发生变化时触发。
我可以创建一个取决于所有三个的计算字段,但是不是更简单的方法吗?
以下示例之类的东西不起作用,因为现有的本身不能被观察(对吗?)
viewModel.existingPlans.subscribe(function(newValue) {
// do stuff with newValue.startDate(), etc
})
答案 0 :(得分:1)
这取决于这些属性发生变化时应该发生什么。如果你只是想触发一个类似的事件,你可以订阅属性并为它们使用相同的订阅处理程序,比如这个
<div id="Main">
<div id="RightColumn-Template">
<p>Hey</p>
<p>Hey</p><p>Hey</p><p>Hey</p>
</div>
<div id="LeftColumn-Template">
<p>Hey</p>
</div>
</div>
如果您需要计算某些东西或从属性值中提供一些结果,我会创建一个计算的observable。
答案 1 :(得分:0)
由于您正在处理三种不同的可观察对象,因此您无法使用手动订阅。计算的可观察量是要走的路。计算出的observable会自动监视您访问的所有可观察对象,因此只会工作:
ko.computed(function() {
// do stuff with existingPlans.startDate(), etc
});
如果您想绝对确保订阅了视图模型中的所有可观察对象,可以使用ko.toJS
:
ko.computed(function() {
ko.toJS(existingPlans);
// do stuff with existingPlans.startDate(), etc
});