2012-04-28 36 views
1

嗨我試圖使用一個計算值來創建一個可觀察數組的過濾版本http://knockoutjs.com/documentation/fn.html(在底部)。加入計算中斷可觀察數組

對於HTML我有

<select width="50px" data-bind="options: $root.resources, optionsText: 'Name'"></select> 
<select width="50px" data-bind="options: $root.available, optionsText: 'Name'"></select>​ 

我的視圖模型是這樣的:

var viewModel = function() { 
    var self = this; 
    self.resources = ko.observableArray([{Name: "Anna",Available: true}, {Name: "Bert", Available: false}]); 

    self.getFilteredResources = function (isAvailable) { 
     var all = self.resources(), results = []; 
     var resource; 
     for (resource in all){ 
      if (resource.Available() === isAvailable){ 
       results.push(resource); 
      } 
     } 
     return results; 
    };  
    //self.available = ko.computed(function() { self.getFilteredResources(true);}, this);  
}; 

ko.applyBindings(new viewModel());​ 

您還可以在這裏看到http://jsfiddle.net/patrickhastings/eCtFY/1/

中的代碼,它代表了出來說就是一個下拉與安娜和伯特在它和一個空的這是罰款。

當我取消註釋self.available而不是第二個下拉列表填充Anna時,我得到兩個空的下拉列表。幫助請告訴我我在哪裏愚蠢。

+0

通過觀察http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html它似乎是我能實現我需要什麼通過使用ko.utils.arrayFilter並將下拉列表綁定到那個(http://jsfiddle.net/patrickhastings/PTLF4/),但我仍然想知道我的原始功能在哪裏。 – 2012-04-28 12:14:43

回答

1

幾個小問題,在這一個:

要調用resource.Available()Available不是可觀察到的,所以你只需要檢查resource.Available === isAvailable

此外,您觀察到的計算需求,returnself.getFilteredResources

for resource in all結果會給你的索引,而不是資源本身。

我建議是這樣的:http://jsfiddle.net/rniemeyer/jCYT7/

+0

謝謝瑞恩,完美的作品 – 2012-04-28 14:50:51