语法问题.淘汰赛.用于过滤

Syntax problems. Knockout. For filtering

本文关键字:过滤 用于 淘汰赛 问题 语法      更新时间:2023-09-26

我正在处理jquery、Json数据和敲除。我所做的是获取一个数据,添加到绑定表中,并为name添加一个筛选字段。

问题是,这个过滤字段并不像我希望的那样工作。因为它匹配整个单词。这就是代码:

self.filter = ko.observable();
        self.tickets = ko.computed(function () {
            var filter = self.filter(),
                arr = [];
            if (filter) {
                ko.utils.arrayForEach(self.ticketViewModel(), function (item) {
                    if (item.Name() == filter || item.Status() == filter) {
                        arr.push(item);
                    }
                });
            } else {
                arr = self.ticketViewModel();
            }
            return arr;
        });

所以我试着让它从第一个字母开始过滤。我找到了几种方法,这些方法应该有效,但我无法得到结果,因为我总是会遇到各种语法错误。也许谁用过这些可以帮助我。它的代码:

    self.filter = ko.observable().toString().toLowerCase();
    self.tickets = ko.computed(function () {           
        var filter = self.filter(), 
            arr = [];
        if (!filter) {
            arr = self.ticketViewModel();
        } else {
            ko.utils.arrayFilter(self.ticketViewModel(), function (item) {
                if (ko.utils.stringStartsWith(item.Name().toLowerCase()), filter)
                    arr.push(item);
            })
        }
        return arr;
    });

我得到的最后一个错误是-未捕获类型错误:字符串不是行上的函数

var filter = self.filter()

同样的错误我也犯过几次,但在修复后,我又犯了一次,而通常我会再次犯。。。对不起我的英语。如果需要,我可以发布整个代码。

终于自己找到了答案。

我使用的不是ko.util.stringStartsWith(),而是一个简单的Javascript检查。而且效果非常好。也许它对某人有用。

self.filterName = ko.observable('');
            self.filterCompany = ko.observable('');
            self.filterStatus = ko.observable('');
            self.tickets = ko.computed(function () {
                return ko.utils.arrayFilter(self.ticketViewModel(), function (rec) {
                    return (
                              (
                                (self.filterName().length == 0 || (rec.Name().toLowerCase().indexOf(self.filterName().toLowerCase()) > -1)) &&
                                (self.filterCompany().length == 0 || (rec.CompanyName().toLowerCase().indexOf(self.filterCompany().toLowerCase()) > -1)) &&
                                (self.filterStatus().length == 0 || (rec.Status().toLowerCase().indexOf(self.filterStatus().toLowerCase()) > -1))
                              )
                           )
                });
            });