可观察量相互依赖以获取自己的值 - 循环引用

observables dependent on one another for their own values - circular references

本文关键字:自己的 循环 引用 获取 观察 依赖      更新时间:2023-09-26

可能是一个淘汰新手问题。 我这周刚开始学习淘汰赛。

我有两个可观察值 - 宽度和高度。这些值最初是通过抓取单击元素的宽度和高度来设置的,因此此部分无需计算。 问题是,一旦捕获了初始值,我想保持所有未来更改的纵横比。 因此,如果用户更新宽度,我希望高度根据纵横比(原始宽度/原始高度)进行更新。 因此,当用户更改宽度时,高度必须更改,反之亦然。

我已经使用订阅者尝试过这个,但这会导致您可能期望的无限循环,因为宽度的任何更改都需要更改高度,反之亦然。 我已经研究了计算的可观察量和扩展器,但我不确定任何一个是正确的答案,尽管这可能是由于我在淘汰赛方面的经验有限。

如有必要,我可以提供一些代码,但我想如果可能的话,我会尽量保持这个概念。 只是为我指明正确的道路。

感谢您的任何帮助!

就像任何循环依赖一样,你必须打破循环。 与其有两个相互依赖的可观察量,不如使它们依赖于一个或多个常见的可观察量。 可以保持该比率的可观察量。

例如,

function Proportional (width, height) {
    var _ratio = width / height,
        _width = ko.observable(width),
        _height = ko.observable(height);
    this.width = ko.dependentObservable({ read: _width, write: setWidth });
    this.height = ko.dependentObservable({ read: _height, write: setHeight });
    function setWidth(width) {
        _width(width);
        _height(width / _ratio);
    }
    function setHeight(height) {
        _height(height);
        _width(height * _ratio);
    }
}
function ViewModel(data) {
    var p = new Proportional(data.width, data.height);
    this.width = p.width;
    this.height = p.height;
}

小提琴