语法问题。昏死。用于过滤

时间:2014-11-12 14:10:29

标签: javascript jquery knockout.js syntax

我正在使用jquery,Json数据和淘汰赛。我所做的是获取数据,添加到绑定表和名称的过滤器字段。

问题是,过滤器字段不起作用,因为我希望它能够工作。因为它匹配整个单词。那就是代码:

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;
    });

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

var filter = self.filter()

同样的错误,我有几次,但在修复后我得到另一个通常我再次回到它...并抱歉我的英语。 如果需要,我可以发布整个代码。

1 个答案:

答案 0 :(得分:1)

最后自己管理找到答案。

我没有使用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))
                              )
                           )
                });

            });