gpt4 book ai didi

javascript - knockout : dependency of two observables bidirectional

转载 作者:行者123 更新时间:2023-11-28 01:30:18 24 4
gpt4 key购买 nike

想法很简单,但我真的不知道如何解决以下问题。

我想计算圆的周长,

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

但是,这只是一种单向解决方案。

最佳答案

您可以使用可写的计算可观察量

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

关于javascript - knockout : dependency of two observables bidirectional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com