我需要观察a
和b
。
viewModel.a = ko.observable(25);
viewModel.b = ko.observable(25);
他们的总和等于50.更改a
影响b
,更改b
会影响a
。所以显示的金额永远不会超过50。
viewModel.a.subscribe(function(value){
viewModel.b(50 - value);
});
viewModel.b.subscribe(function(value){
viewModel.a(50 - value);
});
http://jsfiddle.net/5nq9g/
有没有办法在淘汰赛中简化这种逻辑?
答案 0 :(得分:2)
我认为您的方法很好,但您可以将其中一个计算出来:
viewModel.b = ko.computed({
read: function() {
return 50 - viewModel.a();
},
write: function(value) {
viewModel.a(50 - value);
}
});
您还可以创建一个函数,该函数返回订阅的新函数,因此您的逻辑只定义一次:
function createMaxFilter(restValueObservable) {
return function(value) {
restValueObservable(50 - value);
};
}
viewModel.a.subscribe(createMaxFilter(viewModel.b));
viewModel.b.subscribe(createMaxFilter(viewModel.a));