如何使用';如果';在knockout.js中绑定以从相关下拉菜单中排除/包括项

如何使用';如果';在knockout.js中绑定以从相关下拉菜单中排除/包括项,knockout.js,Knockout.js,我有两个汽车下拉菜单——汽车1:{丰田、马自达、福特、本田}和汽车2:{保时捷、迈巴赫、法拉利、玛莎拉蒂} 我试图在knockout.js中使用“if binding”,这样,如果从第一个下拉列表中选择了“Toyota”,那么第二个下拉列表中只显示“Porsche”和“Maybach”。但是,如果从第一个下拉菜单中选择了“马自达”或“本田”,则可以从第二个下拉菜单中选择所有内容 我想到了这个,但似乎不起作用: <!-- ko if: Cars1() === $root.Constants.

我有两个汽车下拉菜单——汽车1:{丰田、马自达、福特、本田}和汽车2:{保时捷、迈巴赫、法拉利、玛莎拉蒂}

我试图在knockout.js中使用“if binding”,这样,如果从第一个下拉列表中选择了“Toyota”,那么第二个下拉列表中只显示“Porsche”和“Maybach”。但是,如果从第一个下拉菜单中选择了“马自达”或“本田”,则可以从第二个下拉菜单中选择所有内容

我想到了这个,但似乎不起作用:

<!-- ko if: Cars1() === $root.Constants.Cars1.Toyota === $root.Constants.Cars1.Porsche && $root.Constants.Cars1.Maybach -->
<-- drop-down menu: Cars2 /drop-down menu-->
<!-- /ko -->

<!-- ko if: Cars1() === $root.Constants.Cars1.Mazda || $root.Constants.Cars1.Honda  -->
<-- drop-down menu: Cars2 /drop-down menu-->
<!-- /ko -->

您应该在控制台中测试那些
if
语句,以确定发生了什么

console.log(
“丰田”==“丰田”==“保时捷”&&“迈巴赫”//false
“保时捷”==“丰田”==“保时捷”&“迈巴赫”//false
“迈巴赫”==“丰田”==“保时捷”&“迈巴赫”//false
“马自达”==“丰田”==“保时捷”&“迈巴赫”//false
“本田”=“丰田”=“保时捷”&“迈巴赫”//false
//发生了什么:
(“丰田”、“丰田”、“保时捷”和“迈巴赫”,
真==“保时捷”和“迈巴赫”
//也就是说:它永远不可能是‘真’或‘迈巴赫’,
//因为'true'和'false'都等于'Porsche'`
);
console.log(
“丰田”=“马自达”|“本田”/“本田”
“波奇”==“马自达”| |“本田”/“本田”
“迈巴赫”==“马自达”| |“本田”/“本田”
“马自达”==“马自达”| |“本田”//true
“本田”==“马自达”| |“本田”、/“本田”,
//当输入不等于“Mazda”时,
//返回'Honda',if`bindind将其视为'true'值。
//(除非常数的值为'0'、'null'、'undefined'等)

);使用knockout if绑定并不是一个理想的场景。
理想情况下,“cars2”下拉列表中显示的内容应由Javascript中的回调函数决定,如下所示:

var VM=function(){
var self=这个;
self.cars1=ko.array([“丰田”、“马自达”、“福特”、“本田”);
self.cars2=ko.array([“保时捷”、“迈巴赫”、“法拉利”、“玛莎拉蒂”);
self.selectedCar=ko.可观察(“福特”);
self.selectedCar.subscribe(功能(产品){
如果(自选汽车()=“丰田”){
自驾汽车2([“保时捷”、“迈巴赫”);
}否则{
自驾汽车2([“保时捷”、“迈巴赫”、“法拉利”、“玛莎拉蒂”);
}
});
}
应用绑定(新VM())

它是如何工作的:崩溃、冻结、错误消息、意外行为、蝗虫?