Knockout.js 当父母相互排斥时,击倒验证孩子
这就是我的情况: 我有很多东西。每个项目都有一个单选选项列表。选项在项目之间是相同的。 当选择单选选项时,我需要检查它是否有效。 我通过检查互斥项是否没有选择相同的选项来实现这一点 例如 项目A -基金1 -基金2 -没有资金 B项 -基金1 -基金2 -没有资金 项目C -基金1 -基金2 -没有资金 假设项目A和项目B是互斥的。 因此,可以在项目A上选择基金1,但不能在项目B上选择。如果出现这种情况,则项目A和项目B无效。但是,基金1可以在A和C或B和C上选择 我将如何使用击倒进行此操作? 构建它的最佳方式是什么 我有一个项目列表,每个项目都有一个带有“选定”属性的单选选项列表。Knockout.js 当父母相互排斥时,击倒验证孩子,knockout.js,Knockout.js,这就是我的情况: 我有很多东西。每个项目都有一个单选选项列表。选项在项目之间是相同的。 当选择单选选项时,我需要检查它是否有效。 我通过检查互斥项是否没有选择相同的选项来实现这一点 例如 项目A -基金1 -基金2 -没有资金 B项 -基金1 -基金2 -没有资金 项目C -基金1 -基金2 -没有资金 假设项目A和项目B是互斥的。 因此,可以在项目A上选择基金1,但不能在项目B上选择。如果出现这种情况,则项目A和项目B无效。但是,基金1可以在A和C或B和C上选择 我将如何使用击倒进行此操作?
我正在订阅所选属性,目的是更新父属性项上的标志,以指示是否可以选择该项。当任何子属性发生更改时,需要对所有父属性执行此操作。从孩子身上更新父母似乎不是个好主意。有什么想法/建议吗?所以基本问题是A项和B项不能有相同的值,C项与我的理解有些不相干,因为它总是有效的 在两个单选按钮列表上进行选择时,可以使用计算值确定相等性。由于您没有提供示例代码,我创建了一个演示来说明: HTML: 每次单选按钮更改时,computed将重新计算,因此它可以评估选择是否有效,并且您可以根据其结果执行其他逻辑,在这种情况下,我只是用结果控制可见性或错误标签 所有项目都初始化为无基金,如果项目A和项目B具有相同的无基金选择,则当前不会导致错误。要使其导致错误,只需删除计算中比较的第二部分,如下所示:
isValidA: ko.computed = function () {
return this.selectionA() !== this.selectionB();
}
谢谢如果确定基金是否相互排斥是基于基金上的财产,该怎么办。并且在选择该属性时必须更新该属性,例如,选择Fund1-在Fund1上将所有项目A、B、C的isMutuallyExclusive属性更新为true。取消选择Fund1-将所有项目的isMutuallyExclusive属性更新为false。同样,对于其他基金,我不明白你的意思。此逻辑将突出显示无效状态,您可以将功能添加到/或基于计算值来执行其他条件逻辑。例如,this.isMutallyExclusiveisValidA&&isValidB
var viewModel = {
optionValues: [{
"value": "1",
"label": "Fund 1"
}, {
"value": "2",
"label": "Fund 2"
}, {
"value": "0",
"label": "No Fund"
}],
selectionA: ko.observable("0"),
selectionB: ko.observable("0"),
selectionB: ko.observable("0"),
isValidA: ko.computed = function () {
return (this.selectionA() !== this.selectionB())
|| (this.selectionA() === "0");
},
isValidB: ko.computed = function () {
return (this.selectionA() !== this.selectionB())
|| (this.selectionB() === "0");
},
isValidC: ko.computed = function () {
return true;
}
};
ko.applyBindings(viewModel);
isValidA: ko.computed = function () {
return this.selectionA() !== this.selectionB();
}