KO:两个互相订阅的变量

时间:2014-02-20 14:36:05

标签: knockout.js

我不知道如何正确地提出这个问题...... 我希望有两个相互观察并相应变化的变量。一个是十进制,另一个是百分比。

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

self.varDecimal = ko.observable(valueFromServerSide);

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

self.varPercents = ko.observable(); //should be = self.varDecimal * 100

所以:

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

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

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

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

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

1 个答案:

答案 0 :(得分: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);