2013-05-01 70 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