淘汰循环参考(简单货币转换器)

时间:2014-09-30 08:00:12

标签: javascript knockout.js

我是Knocout.JS的新手,所以我不知道如何解决我的问题。 假设我想写一个小货币转换器。

<div>
    Rate: <input type="text" data-bind="value: Rate" />
</div>
<div>
    USD: <input type="text" data-bind="value: Dollar" />
</div>
<div>
    EUR: <input type="text" data-bind="value: Euro" />
</div>

我的模特是:

var viewModel = function() {
    this.Rate = ko.observable(0);
    this.Dollar = ko.observable(0);
    this.Euro = ko.computed(function() {
        return this.Dollar() * this.Rate();
    }, this);
}    
ko.applyBindings(new viewModel());

所以我想确保每个文本框的更改事件都更新另一个。 例如,如果美元更新,我也想更新欧元

  • 费率的更改将更新欧元
  • 美元的更改将更新欧元
  • 欧元的更改将更新美元

这是我的游乐场:http://jsfiddle.net/gnL4we9z/

1 个答案:

答案 0 :(得分:5)

您可以制作Euro computed writable并在Dollar函数中更新write媒体资源:

this.Euro = ko.computed({
    read: function () {
        return this.Dollar() * this.Rate();
    },
    write: function (value) {
        this.Dollar(value / this.Rate());
    },
    owner: this
});

演示JSFiddle