2014-09-30 108 views
1

我是Knocout.JS的新手,所以我不知道如何完成我的问题。 比方说,我想写一个小货币转换器。Knockout Circular Reference(简单货币转换器)

<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()); 

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

  • 变化将更新欧元
  • 变化美元将更新欧元
  • 变化欧元将更新美元

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

回答

5

你可以让你Eurocomputed writable和更新其write功能您Dollar属性:

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

演示JSFiddle