将对象从数组推送到observableArray

时间:2014-04-23 11:12:56

标签: javascript arrays knockout.js

所以当我用一个可观察数组的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/

2 个答案:

答案 0 :(得分:0)

访问已检查的observable时删除“.value”:

if (viewModel.definition[i].checked() === true) {
...

Knockout管理设置HTML value控件的<input>。您需要知道的是,它是truefalse值的可观察对象。

答案 1 :(得分:0)

首先,click: $root.saveSelectedsaveSelection: function() {

不匹配

第二期

for (var i = 0; i < definition.length; ++i) {
    if (viewModel.definition[i].checked() === true) {

definition和viewModel.definition是这里的两个独立的东西。 viewModel.definition实际上是第一次保存一个空数组。 所以,viewModel.definition [i]将不起作用......