KO:两个互相订阅的变量

ren*_*thy 3 knockout.js

我不知道如何正确地表达这个问题......我想要有两个相互观察并相应改变的变量.一个是小数,另一个是百分比.

我的模型中有一个可观察的.它从服务器端获得价值.

self.varDecimal = ko.observable(valueFromServerSide);
Run Code Online (Sandbox Code Playgroud)

此变量包含十进制值.我需要的是在输入框中显示这个变量(实际上它将是带有自定义绑定的touchspin)并允许用户编辑它.但是,我需要用户编辑不是十进制值,而是百分比.

self.varPercents = ko.observable(); //should be = self.varDecimal * 100
Run Code Online (Sandbox Code Playgroud)

所以:

1)当从服务器映射数据时,我需要self.varPercentsself.varDecimal(self.varDecimal() * 100)计算.

2)我需要self.varPercents在输入中显示(实际上它将是touchspin,但这是后来的),并允许用户编辑百分比.

3)用户正在编辑此百分比,我想相应self.varDecimal地更新(self.varPercents / 100).稍后将self.varDecimal发送回服务器.

是否可以使用某些KO订阅或计算或类似方式?

我知道我可以没有它,例如,当接收数据时我可以简单地计算self.varPercents,但是当将数据发送回服务器时我可以重新计算self.varDecimal,但我想知道这是否可能通过一些淘汰功能,因为实际上我有很多这样的领域,我想要一些通用的溶剂.

And*_*ers 5

你需要使用可写的计算机

http://knockoutjs.com/documentation/computedObservables.html#writeable-computed-observables

http://jsfiddle.net/QAe72/

this.percentage = ko.computed({
    write: function(value) {            
       this.decimal(value / 100);
    },
    read: function() {
        return this.decimal() * 100;
    }
}, this);
Run Code Online (Sandbox Code Playgroud)