2013-05-01 69 views
3

假設我有一個觀察的陣列淘汰賽:觀察到的計數值取決於功能

[{type:'red' , value:1}, 
{type:'blue' , value:'2'}, 
{type:'red' , value:3}, 
{type:'red' , value:4}] 

現在我需要哪種類型返回計數形式陣列可觀察到的值==紅色 該計上更新每次可觀察數組的對象的任何更改。

回答

4

您這裏需要一個計算obervable,這樣的事情就可以了(未經測試):

var yourArray = ko.observableArray([]); 

var count = ko.computed(function() { 
    var items = ko.utils.arrayFilter(yourArray(), function(item) { 
     return item.type == "red"; 
    }); 

    return items.length; 
}); 
+1

謝謝你的回覆克里斯。 因爲我是新來淘汰賽,所以你可以告訴我怎樣才能得到這個數據綁定文本計數。 我試圖通過在html中替換var count this.count =函數 和但它返回函數本身。 – xyz 2013-05-01 09:23:25

+0

我會編輯我的帖子:) – 2013-05-01 09:32:33

+0

其實,嘗試... text:count()來代替。 – 2013-05-01 09:33:11

5

您可以使用ko.computed做到這一點。

例視圖模型:

function ViewModel() { 
    var self = this; 
    self.arrayOfObjects= ko.observableArray([{type:'red' , value:1},{type:'blue' , value:'2'},{type:'red' , value:3},{type:'red' , value:4}]); 

    self.count = ko.computed(function() { 
     var redItems = ko.utils.arrayFilter(self.arrayOfObjects(), function(arrayItem) { 
      return arrayItem.type == 'red'; 
     }); 

     return redItems.length; 
    }); 
} 

任何約束來算將有它的價值變化的紅色元素更改次數:

<span data-bind="text: count"></span> 

示例 - http://jsfiddle.net/Wmb47/2/

+0

感謝理查德它適用於我.. 。 – xyz 2013-05-01 10:26:21

+0

@kishal Np,隨時點擊我的答案來打勾,如果它對你有幫助,就接受這個答案。 – 2013-05-01 13:55:19