Knockout.js KnockoutJS中的过滤器array

Knockout.js KnockoutJS中的过滤器array,knockout.js,Knockout.js,具有以下视图模型(取出部分零件) 我希望有一个项目总数的跨度: <span data-bind="text: openProjects().length + ' Projects'"></span> 然后我想要每个项目阶段的跨度,显示该阶段的项目数量,但我不确定如何传递参数 <span data-bind="text: filteredProjects().length"></span> // pass on for example 'Sta

具有以下视图模型(取出部分零件)

我希望有一个项目总数的跨度:

<span data-bind="text: openProjects().length + ' Projects'"></span>

然后我想要每个项目阶段的跨度,显示该阶段的项目数量,但我不确定如何传递参数

<span data-bind="text: filteredProjects().length"></span> // pass on for example 'Starting'

<span data-bind="text: filteredProjects().length"></span> // pass on for example 'Running'

<span data-bind="text: filteredProjects().length"></span> // pass on for example 'Closing'
//传递例如“启动”
//传递例如“Running”
//传递例如“结束”

self.filteredProjects=ko.computed(function(){
中,我可以简单地对值进行硬编码并重复代码三次,但必须有更好的方法,即以某种方式将self.currentPhase与参数绑定?

您的条件可能不匹配

self.filteredProjects = ko.computed(function() {
    return ko.utils.arrayFilter(self.openProjects(), function(ProjectModel) {   
        return ProjectModel.phase == self.currentPhase();
    });
}); 
试着这样做

return ProjectModel.phase() == self.currentPhase();

如果您知道相位是一个可观察的

,您可以使用工厂方法来构建
ko.computed

self.filteredProjects = function(phase) {
    // use currentPhase as default
    var filterPhase = phase || self.currentPhase();

    return ko.computed(function() {
        return ko.utils.arrayFilter(self.openProjects(), function(ProjectModel) {   
            return ProjectModel.phase == filterPhase;
        });
    });
};
此绑定使用currentPhase

<span data-bind="text: filteredProjects()().length"></span>

这些绑定使用“启动”、“运行”和“关闭”

<span data-bind="text: filteredProjects('Starting')().length"></span>
<span data-bind="text: filteredProjects('Running')().length"></span>
<span data-bind="text: filteredProjects('Closing')().length"></span>

<span data-bind="text: filteredProjects('Starting')().length"></span>
<span data-bind="text: filteredProjects('Running')().length"></span>
<span data-bind="text: filteredProjects('Closing')().length"></span>