2014-09-30 141 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