首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当父母相互排斥时,淘汰赛验证孩子

当父母相互排斥时,淘汰赛验证孩子
EN

Stack Overflow用户
提问于 2014-08-29 10:14:42
回答 1查看 163关注 0票数 0

这就是我的设想:

我有东西。每个项目都有一个无线电选项列表。选项在项目之间是相同的。当选择无线电选项时,我需要检查它是否有效。我是通过检查互斥项没有选择相同的选项来做到这一点的。

例如:

项目A-基金1-基金2-无基金

项目B-基金1-基金2-无基金

项目C-基金1-基金2-无基金

让我们假设项目A和B是相互排斥的。因此,基金1可以在A项上选择,但不能在B项上选择。如果发生这种情况,则A项和B项无效。但是,基金1可以选择A和C或B和C。

我该怎么用淘汰赛来做这个呢?构造它的最佳方法是什么?

我有一个项目列表,每个项目都有一个带有“Selected”属性的无线电选项列表。我订阅了所选的属性,其思想是更新父属性( item )上的一个标志,以指示是否可以选择该项。当任何子属性更改时,都需要对所有父属性执行此操作。从孩子那里更新父母似乎不是个好主意。有什么想法/建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-29 11:15:07

因此,基本的问题是,Item AItem B不能有相同的值,与我所理解的Item C有点无关,因为它总是有效的。

在对两个单选按钮列表进行选择时,可以使用computed来确定相等性。由于您还没有提供示例代码,所以我创建了一个演示来说明:

JS Fiddle演示

HTML:

代码语言:javascript
复制
<p>Item A: 
   <span class="error" data-bind="visible: !isValidA()">Invalid Selection</span>
</p>
<div data-bind="foreach: optionValues">
    <input type="radio" name="optionsGroup1" 
           data-bind="attr: {value: value}, 
                      checked: $root.selectionA" /> 
    <span data-bind="text: label"></span>
</div>

<p>Item B: 
   <span class="error" data-bind="visible: !isValidB()">Invalid Selection</span>
</p>
<div data-bind="foreach: optionValues">
    <input type="radio" name="optionsGroup2" 
           data-bind="attr: {value: value}, 
                      checked: $root.selectionB" /> 
    <span data-bind="text: label"></span>
</div>

<p>Item C: 
   <span class="error" data-bind="visible: !isValidC()">Invalid Selection</span>
</p>
<div data-bind="foreach: optionValues">
    <input type="radio" name="optionsGroup3" 
           data-bind="attr: {value: value}, 
                      checked: $root.selectionC" /> 
    <span data-bind="text: label"></span>
</div>

ViewModel:

代码语言:javascript
复制
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);

每次单选按钮更改时,计算都会重新计算,因此它可以评估选择是否有效,并且您可以根据它的结果执行其他逻辑,在这种情况下,我只是用结果控制可见性或错误标签。

所有项目都初始化为No Fund,如果Item AItem B有相同的选择No Fund,那么它目前不会导致错误。若要使其导致错误,只需删除计算中的比较的第二部分,如下所示:

代码语言:javascript
复制
isValidA: ko.computed = function () {
    return this.selectionA() !== this.selectionB();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25566202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档