【问题标题】:knockout Interdependent variables淘汰赛 相关变量
【发布时间】:2014-05-06 18:45:46
【问题描述】:

我有相互依赖的淘汰变量。

示例:

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)

我该怎么做?

问候, 亚尼夫阿博

【问题讨论】:

  • 您可以尝试将它们改为ko.computeds,以便它们可以根据另一个的当前值计算它们的值

标签: knockout.js


【解决方案1】:

您可以通过将其中一个 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

【讨论】:

    【解决方案2】:

    使用一个作为规范值,然后从它导出另一个。假设我们将 _CostNoVAT 设为规范形式,然后当用户输入带增值税的成本时,您将 costNovat 变量设置为 6.66,然后让它滴流到 _ConstIncudeVAT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-15
      • 2013-06-08
      • 1970-01-01
      • 2014-03-31
      • 2012-05-11
      • 1970-01-01
      • 2014-01-08
      • 2013-04-10
      相关资源
      最近更新 更多