Knockout.js 使用foreach控制流和radion作为模板的Knockout js

Knockout.js 使用foreach控制流和radion作为模板的Knockout js,knockout.js,Knockout.js,“checked”绑定与foreach控制流生成的单选按钮不太兼容 例如: <div data-bind="foreach: targetAudience"> <div> <label> <input name="targetAudience" type="radio" data-bind="checked: isSelected,value:id" />

“checked”绑定与foreach控制流生成的单选按钮不太兼容

例如:

 <div data-bind="foreach: targetAudience">
        <div>
            <label>
                <input name="targetAudience" type="radio"  data-bind="checked:    isSelected,value:id" />
                <span data-bind="text: name"></span>
            </label>
        </div>
    </div>

每个vm(单个目标)将在isSelected属性中获取所选无线电的id。
这看起来有点难闻,有没有更好的方法知道谁是所选的单选按钮?

使用单选按钮时的“选中”绑定旨在使用单个单选按钮的“值”填充模型,而不是更新数组中每个项目的标志

不过,一个简单的方法是让它在父项上填充一个值,然后在每个项上添加一个计算的可观察项,以确定其所选标志是真还是假

以下是一个示例:

var Item = function(id, name, selected) {
   this.id = id;
   this.name = ko.observable(name);
   this.selected = ko.computed(function() {
        return parseInt(selected(), 10) == this.id;  
   }, this);
};

var ViewModel = function() {
    this.selected = ko.observable(2);
    this.items = ko.observableArray([
        new Item(1, "one", this.selected),
        new Item(2, "two", this.selected),
        new Item(3, "three", this.selected)
       ]);
};
然后,像这样绑定:

<ul data-bind="foreach: items">
    <li>
        <input type="radio" name="items" data-bind="attr: { value: id }, checked: $root.selected" />
        <span data-bind="text: name"></span>
    </li>
</ul>

您希望将
isSelected
设置为什么?另外,您可能希望使用
attr:{value:id}
而不是
value
绑定,因为您不希望将多个事件处理程序附加到它。我希望在所有未选中的收音机上选择isSelected为false,在选中的收音机中选择isSelected为true。请解释您的评论,我想我遗漏了一些东西,如何处理多个事件处理程序。
绑定添加一个事件处理程序,以在输入更改时尝试更新模型。选中的
绑定也能做到这一点,并且知道如何正确处理单选按钮。因此,您确实只想使用
checked
然后使用
attr:{value:yourValue}
在computed方法中保持
value
属性同步(没有添加其他功能),ko/js如何知道parseInt中的所选()属于视图模型,
selected
被传递给某个项的构造函数,并通过closure.ohh可供计算的可观察函数使用。ohh,没有注意到,tanksAm I缺少某些内容或该项。selected从未调用过吗?我在您的JSFIDLE中删除了它,功能没有改变。更新:没关系。我想你会用在其他地方。