淘汰相互依赖的变量

时间:2014-03-27 16:28:59

标签: knockout.js

我有相互依赖的敲除变量。

Exempla:

var _CostNoVAT =  ko.observable(0);
var _CostIncludeVAT =  ko.observable(0);
var _VAT= 0.50;

如果用户将_CostNoVAT更改为10则_CostIncludeVAT需要为15(10 *(1 + VAT) 如果用户将_CostIncludeVAT更改为10则_CostNoVAT需要为6.66(10 /(1 + VAT)

我该怎么做?

的问候, yaniv abo

2 个答案:

答案 0 :(得分:3)

您可以通过将其中一个observable转换为可写的计算器来完成此操作。这里,_CostIncludeVAT是可写的计算。当它被改变时,它的write函数被执行,实际上改变了_CostNoVAT的值;然后将触发其read函数执行...

function VM () {
    this._VAT= 0.50;

    this._CostNoVAT = ko.observable(0);

    this._CostIncludeVAT = ko.computed({
        read: function () {
            return this._CostNoVAT() * (1 + this._VAT);
        },
        write: function(value) {
            this._CostNoVAT(value / (1 + this._VAT));
        },
        owner: this
    });
}

ko.applyBindings(new VM());

JsBin:http://jsbin.com/vizopico/1/edit?html,js,output

答案 1 :(得分:0)

使用一个作为规范值,然后将另一个派生到\中。假设我们将_CostNoVAT设为规范形式,然后当用户输入增值税成本时,将costNovat变量设置为6.66,然后允许它流入_ConstIncudeVAT。