2

我必须观察ab.

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/
有没有办法在淘汰赛中简化这个逻辑?

4

1 回答 1

2

我认为您的方法很好,但是您可以计算其中之一:

viewModel.b = ko.computed({
    read: function() {
        return 50 - viewModel.a();
    },
    write: function(value) {
        viewModel.a(50 - value);
    }
});

http://jsfiddle.net/ybeQm/

您还可以创建一个函数,该函数为订阅返回一个新函数,因此您的逻辑只定义一次:

function createMaxFilter(restValueObservable) {
    return function(value) {
        restValueObservable(50 - value);
    };
}
viewModel.a.subscribe(createMaxFilter(viewModel.b));
viewModel.b.subscribe(createMaxFilter(viewModel.a));

http://jsfiddle.net/T4Hh3/

于 2013-11-11T21:15:01.353 回答