敲除:两个可观察到双向的依赖性



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

我想计算一个圆的外围,

 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/

在此单向溶液中,i键入半径并获得圆圈的外围。实际上,我只是可以扭转整个解决方案。设置外围并获得半径。但是我打算有一个双向解决方案。我该如何使用quotigoutjs?

下一步是在圆圈(半径或外围)发生变化时解雇事件。通常我会订阅:

 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

相关内容

  • 没有找到相关文章

最新更新