替换作为参数发送的淘汰可观察对象

Replacing a knockout observable sent as a parameter

我将两个可观察值作为参数发送,我想用另一个可观察值替换这两个;由于某种原因,它没有被替换,但如果我更改可观察对象的值,它就会起作用。

private searchAndReplace = (flag: string, observable1: KnockoutObservable<string>, observable2: KnockoutObservable<string>) => {
        const itemFound = this.items.find((item) => item.flag === flag);
        if (itemFound) {
            observable1 = item.observableX;
            observable2 = item.observableY;
        }
    }

在这种情况下,我想用项目的可观察对象替换发送的变量,但它似乎不起作用...

In this case I want to replace the variable sent...

你不能。您拥有的参数未以任何方式连接到用作函数参数的变量(JavaScript 是字符串传递值,它没有传递引用变量的引用被传递到函数中)。

显然,如果您只想设置那些可观察值的值,您可以这样做:

if (itemFound) {
    observable1(item.observableX());
    observable2(item.observableY());
}

您也可以订阅新的 observables,但您最终可能会订阅很多:

// Probably a bad idea
if (itemFound) {
    item.observableX.subscribe(observable1);
    item.observableY.subscribe(observable2);
}

...但是如果你真的想自己替换可观察对象,最好的办法可能是让 searchAndReplace return 这对应该替换现有的可观察对象:

private searchAndReplace = (flag: string, observable1: KnockoutObservable<string>, observable2: KnockoutObservable<string>) => {
    const itemFound = this.items.find((item) => item.flag === flag);
    if (itemFound) {
        return [item.observableX, item.observableY];
    }
    return [observable1, observable2];
}

然后在你调用它的地方,使用解构赋值:

[original1, original2] = searchAndReplace("flag", original1, original2);