arrays - 如何将数组呈现为单选按钮列表?

标签 arrays foreach knockout.js radio checked

我想遍历我在 Javascript 中定义的数组并呈现单选按钮列表。我的代码目前不起作用,如下所示(也在 jsfiddle 上):

<div data-bind="foreach: options" >
    <div>
        <input type="radio" name="optionsGroup" data-bind="checked: selected" />
        <span data-bind="text: label"></span>
     </div>    
</div>

var optionsList = [
    {"value": "a","label": "apple"},
    {"value": "b","label": "banana"},
    {"value": "c","label": "carrot"}
];
function viewModel() {
    var self = this;
    self.options = optionsList;
    self.selected = ko.observable("a");
    self.selected.subscribe(function(newValue) {
        alert("new value is " + newValue);
    });
}
ko.applyBindings(new viewModel());

如果我的数组是 html 的一部分,那么它可以正常工作,请参阅此(或 jsfiddle):

<div>
    <input type="radio" name="optionsGroup" value="a" data-bind="checked: selected"     />Apple
</div>
<div>
    <input type="radio" name="optionsGroup" value="b" data-bind="checked: selected" />Banana
</div>
<div>
     <input type="radio" name="optionsGroup" value="c" data-bind="checked: selected" />Carrot
</div>
<div data-bind="text: selected">
</div>

function viewModel() {
    var self = this;
    self.selected = ko.observable("a");
    self.selected.subscribe(function(newValue) {
        alert("new value is " + newValue);
    });
}    
ko.applyBindings(new viewModel());

我通过在我的 javascript 中生成所有 html 并使用复选框来实现它,但我很难使用 foreach 迭代器生成一组单选按钮。

有没有人得到像我第一个工作的例子?

最佳答案

这是执行此操作的一种方法。请注意 attr绑定(bind)应该在 checked 之前捆绑。

var optionsList = [
    {"value": "a", "label": "apple"},
    {"value": "b", "label": "banana"},
    {"value": "c", "label": "carrot"}
];

function viewModel() {
    this.options = optionsList;
    this.selected = ko.observable("a");
}

ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<h3>Fruits</h3>
<div data-bind="foreach: options" >
  <label>
    <input type="radio"
           name="optionsGroup" 
           data-bind="attr: {value: value}, checked: $root.selected" />
    <span data-bind="text: label"></span>
  </label>    
</div>

<h3>Selected value:</h3>
<pre data-bind="text: ko.toJSON($root.selected)"></pre>

关于arrays - 如何将数组呈现为单选按钮列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920550/

相关文章:

arrays - knockout 绑定(bind)内的 foreach 绑定(bind)(数组内的数组)

python - cv2.imshow() 给出黑屏

php - 根据给定的两个值从多维数组中查找值

php - 从循环创建的表单中检索多行...卡住了

javascript - 复合可观察量条件的 knockout applyBindingsToNode 问题

javascript - 启用与多个 bool 可观察标志的绑定(bind)

knockout.js - 防止计算收集依赖项

java - 创建数组编译时间?

javascript - 比较对象内的某些键、值对 - 无直接匹配 (JavaScript)

javascript - 在 forEach 循环期间跳过第一次迭代