我要发送两个可观察值作为参数,我想用另一个可观察值替换这两个;由于某些原因,它不会被替换,但是如果我更改可观察对象上的值,它将起作用。
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;
}
}
在这种情况下,我想用该项目的可观察值替换发送的变量,但它似乎不起作用...
答案 0 :(得分:1)
在这种情况下,我想替换发送的变量...
不能。您拥有的参数没有以任何方式连接到用作函数参数的变量(JavaScript是字符串传递值,它没有将引用传递给变量的传递引用。功能)。
很明显,如果您只想设置这些可观察对象的值,则可以这样做:
if (itemFound) {
observable1(item.observableX());
observable2(item.observableY());
}
您还可以订阅新的Observable,但最终可能会得到很多订阅:
// Probably a bad idea
if (itemFound) {
item.observableX.subscribe(observable1);
item.observableY.subscribe(observable2);
}
...但是,如果您真的想替换可观察对象本身,那么最好的办法就是让searchAndReplace
返回这对可替换现有对象的可观察对象对: / p>
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);