2013-05-01 69 views
0

或 - 確定是否已選擇給定項目。敲除:確定已選擇陣列中的哪些項目

我有一個可以「檢查」的對象數組 - 如果一個項目的複選框被選中,一些條件屬性應該爲父元素激活(顏色應該改變)。我有條件的東西和複選框的工作,我只是無法弄清楚如何有效地監測每個項目是否被選中。

我的當前實現遍歷「selectedItems」數組以確定它是否包含每個元素的目標元素。我覺得這是完成這個最糟糕的可能方式:

var folderViewModel = function (data) { 
    var self = this; 
    self.isSelected = ko.computed(function() { 
       var i = publishedSelectedFolders().length; 
       debugger; 
       while (i--) { 
        if (publishedSelectedFolders[i] === self.folderId()) { 
         alert("true"); 
         return true; 
        } 
       } 
       return false; 
      }, self); 
      ..... 

任何提示將是美好的。這是我的小提琴(簡體儘可能):

http://jsfiddle.net/mWXTs/3/

回答

1

我會做它周圍的其他方法 - 使用checked綁定綁定到isSelected(而不是選擇項目的數組):

<input type="checkbox" data-bind="checked: isSelected" /> 

在每個文件夾:

self.isSelected = ko.observable(false); 

在父:

vm.selectedItems = ko.computed(function() { 
    return ko.utils.arrayFilter(vm.items(), function(item) { 
     return item.isSelected(); 
    }); 
});