0

所以我几乎完成了我一直在研究的这个客人名单前端应用程序。我要做的最后一件事是允许传递一个字符串来按名称过滤列表。因此,通过订阅用户在字段中输入一些名称,我应该能够使用这个 ko 计算函数以这种不同的方式搜索数组。请记住,self.guests 是一组来宾对象。

self.displayResults = ko.computed(function(){
    if(self.displayTypeOf() == 'slice'){
        var ary = self.guests.slice(self.startValue(),self.endValue());
        console.log(ary)
        return ary
    }else if(self.displayTypeOf() == 'string'){
        //Code I need goes here
    }
});

您可以看到通常列表是使用列表的切片部分计算的,当用户开始在输入中输入内容时,我将使用我要求的搜索数组函数覆盖并更新此计算列表。

提前致谢!

4

2 回答 2

1

我建议使用ko.utils.arrayFilter实用功能进行过滤:

self.displayResults = ko.computed(function(){
    if(self.displayTypeOf() == 'slice'){
        var ary = self.guests.slice(self.startValue(),self.endValue());
        console.log(ary)
        return ary
    }else if(self.displayTypeOf() == 'string'){
        // Init filter
        var filter = self.SomeValue();
        var ary = ko.utils.arrayFilter(self.guests(), function(item) {
           return ko.utils.stringStartsWith(item.name().toLowerCase(), filter);
        });
        console.log(ary);
        return ary;
    }
});

在此处阅读有关 ko utils 方法的更多信息:http ://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

于 2012-10-23T14:24:32.770 回答
0

您可以使用Array::filter

var guestlist = [ 'Foo Bar', 'Doo Bar', 'Foo Doo', ... ];

function guestFilter(element) {
    return element.indexOf('Bar') > 0;
}

guestlist.filter(guestFilter); // [ 'Foo Bar', 'Doo Bar' ]
于 2012-10-23T14:05:31.127 回答