在 knockout js 中,我试图对数据数组执行 foreach 以显示复选框。我遇到的问题是,在我与其中一个框交互之前,选中的数据绑定(bind)似乎不会运行。例如,下面我生成了 5 个文本框,其中没有一个显示为选中状态。然而,当我点击“一”、“二”和“四”时,它们也会被选中,因为它们应该从一开始就被选中。
Javascript:
var viewModel = {};
viewModel.choices = ["one", "two", "three", "four", "five"];
viewModel.selectedChoices = ko.observableArray(["two", "four"]);
viewModel.selectedChoicesDelimited = ko.dependentObservable(function () {
return viewModel.selectedChoices().join(",");
});
ko.applyBindings(viewModel);
HTML:
<ul class="options" data-bind="foreach: choices">
<li><label><input type="checkbox" name="NotifyMembers" data-bind="checked: $parent.selectedChoices, attr: { value: $data }" /><span data-bind="text: $data"></span></label></li>
</ul>
<hr />
<div data-bind="text: selectedChoicesDelimited"></div>
fiddle 位于:http://jsfiddle.net/bvGG3/1/
感谢您的帮助。
最佳答案
在 3.0 版之前的 Knockout 中,绑定(bind)按顺序触发,所以你的问题是你的 checked
绑定(bind)在你的 attr
绑定(bind)之前触发。
因此您需要更改绑定(bind)的顺序:
<input type="checkbox" name="NotifyMembers"
data-bind="attr: { value: $data }, checked: $parent.selectedChoices" />
演示 JSFiddle .
或者当您更新到 3.0(演示 JSFiddle)时,您的原始代码将起作用。
关于javascript - Knockout js复选框勾选绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062306/