【发布时间】:2012-02-13 18:53:33
【问题描述】:
我想遍历我在 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 迭代器生成一组单选按钮。
有人得到像我第一个工作的例子吗?
【问题讨论】:
-
当然你可以想出一个信息更丰富的标题。
-
值得注意的是,您的 viewModel 中不需要
var self = this。删除该行并将所有selfs 更改为this。没有范围也没关系。
标签: arrays foreach knockout.js radio checked