这个想法很简单,但我真的不知道如何解决以下问题。
我想计算一个圆的周边,
U = 2*Math.PI*R
因此,U是周边,R是圆的半径。单向解决方案很简单。 HTML代码看起来像
R: <input data-bind="value: radius"><br>
U: <input data-bind="value: periphery">
,ViewModel看起来像
function ViewModel() {
this.radius = ko.observable(1);
this.periphery = ko.computed(function(){
var r = parseFloat(this.radius());
return 2*Math.PI*r;
},this);
}
以下是一个示例:http://jsfiddle.net/dundanox/2SsF9/
在这种单向解决方案中,我键入半径并获得圆的外围。实际上我只是可以扭转整个解决方案。设置外围并获得半径。但我打算有一个双向解决方案。我怎么能用KnockoutJS做到这一点?
下一步是在圆(半径或周边)发生变化时触发事件。通常我会订阅:
vm.radius.subscribe(function(r){ // do someting });
但是,再一次,它只是一种单向解决方案。
答案 0 :(得分:1)
只需使用可写的计算可观察量
this.periphery = ko.computed({
read: function () {
var r = parseFloat(this.radius());
return 2 * Math.PI * r;
},
write: function (value) {
var p = parseFloat(value);
var r = p / (2 * Math.PI)
this.radius(r);
},
owner: this
});
<强> JSFIDDLE 强>