knockout:取决于函数的可观察计数值

xyz*_*xyz 3 html javascript knockout.js

假设我有一个可观察的数组

[{type:'red' , value:1},
{type:'blue' , value:'2'},
{type:'red' , value:3},
{type:'red' , value:4}]
Run Code Online (Sandbox Code Playgroud)

现在我需要一个可观察的值,它返回带有类型== red的计数表单数组,并且每次对可观察数组的对象的任何更改都会更新此计数.

Chr*_*xon 5

你需要一个计算的 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;
});
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 5

你可以ko.computed用来做这件事.

示例viewmodel:

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;
    });
}
Run Code Online (Sandbox Code Playgroud)

任何必须计数的东西都会随着红色元素数量的变化而变化:

 <span data-bind="text: count"></span>
Run Code Online (Sandbox Code Playgroud)

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