2014-04-23 27 views
0

所以我試圖推動存儲在數組中的對象,當一個複選框被敲除到一個可觀察數組。從一個數組中將對象push到observableArray

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語句是什麼在這裏造成問題,但我不知道我做錯了什麼。但結果應該是,對於每個選中的複選框,該對象(現在對於'checked'的值爲true)應該被推送到selectedItems數組,因此(對於此示例)空白的selectedItems數組應該具有對象

{title: 'some text', checked: ko.observable(false), definition: '<p>Some HTML</p>'} 

它在saveSelection函數運行後。

- 編輯 - 此代碼的小提琴:http://jsfiddle.net/imagitron/mMc6k/6/

+0

您的'checked'觀察值內沒有'value'屬性,所以您只需要編寫if(viewModel.definition [i] .checked()=== true)' – nemesv

回答

0

刪除 「.value的」 當訪問檢查可觀察到:

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

淘汰賽管理設置HTML <input>控制的value 。所有你需要知道的是,這是一個可觀察的值,其值爲truefalse

+0

我試過了,它仍然沒有填充selectedItems數組,我編輯了我的帖子以鏈接到代碼的小提琴 – Imagitron

+0

這最終工作,所有我必須做的除此之外,替換viewModel.definition [i]與簡單的定義[i] – Imagitron

0

首先,click: $root.saveSelected不匹配saveSelection: function() {

第二期

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

定義和viewModel.definition是兩個不同的東西在這裏。 viewModel.definition實際上是首先保存一個空數組。 因此,viewModel.definition [i]將不起作用...

+0

更新,仍然不是將數據添加到selectedItems數組 – Imagitron

相關問題