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

Yve*_*ves 1 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>
Run Code Online (Sandbox Code Playgroud)

我的模型是:

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());
Run Code Online (Sandbox Code Playgroud)

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

  • 利率变动将更新欧元
  • 美元的变化将更新欧元
  • 欧元的变化将更新美元

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

nem*_*esv 5

您可以使您的Euro 计算可写Dollar在其write函数中更新您的属性:

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

演示JSFiddle.