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