所以当我用一个可观察数组的knockout调用一个复选框时,我试图推送存储在数组中的对象。
HTML:
<input type="checkbox" data-bind="checked: checked, click: $root.saveSelected"/>
JS:
var definition = [
{title: 'some text', checked: ko.observable(false), definition: '<p>Some HTML</p>'}
],
var viewModel = {
selectedItems: ko.observableArray([]),
saveSelected: function() {
for (var i = 0; i < definition.length; ++i) {
if (viewModel.definition[i].checked().value === true) {
viewModel.selectedItems.push(definition[i]);
}
}
}
所以我很确定我的if语句是导致此问题的原因,但我不确定我做错了什么。但结果应该是对于所选的每个复选框,该对象(现在的值为true,用于&#39;已检查&#39;)应该被推送到selectedItems数组,以便(使用此示例)空的selectedItems数组应该有对象
{title: 'some text', checked: ko.observable(false), definition: '<p>Some HTML</p>'}
在saveSelection函数运行之后。
- EDIT-- 这段代码的小提琴:http://jsfiddle.net/imagitron/mMc6k/6/
答案 0 :(得分:0)
访问已检查的observable时删除“.value”:
if (viewModel.definition[i].checked() === true) {
...
Knockout管理设置HTML value
控件的<input>
。您需要知道的是,它是true
或false
值的可观察对象。
答案 1 :(得分:0)
首先,click: $root.saveSelected
与saveSelection: function() {
第二期
for (var i = 0; i < definition.length; ++i) {
if (viewModel.definition[i].checked() === true) {
definition和viewModel.definition是这里的两个独立的东西。 viewModel.definition实际上是第一次保存一个空数组。 所以,viewModel.definition [i]将不起作用......