我正在使用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()
同样的错误,我有几次,但在修复后我得到另一个通常我再次回到它...并抱歉我的英语。 如果需要,我可以发布整个代码。
答案 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))
)
)
});
});