Knockout.js 当父母相互排斥时,击倒验证孩子

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 -基金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();
}