Javascript 语法问题。击倒。用于过滤
我正在使用jquery、Json数据和knockout。我所做的是获取一个数据,添加到绑定表中,并为name添加一个过滤器字段 问题是,过滤器字段的工作方式与我希望的不同。因为它与整个词相匹配。这就是代码:Javascript 语法问题。击倒。用于过滤,javascript,jquery,knockout.js,syntax,Javascript,Jquery,Knockout.js,Syntax,我正在使用jquery、Json数据和knockout。我所做的是获取一个数据,添加到绑定表中,并为name添加一个过滤器字段 问题是,过滤器字段的工作方式与我希望的不同。因为它与整个词相匹配。这就是代码: self.filter = ko.observable(); self.tickets = ko.computed(function () { var filter = self.filter(), arr = [];
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;
});
我得到的最后一个错误是-uncaughttypeerror:string不是第行的函数
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))
)
)
});
});
过滤器是一个字符串<代码>self.filter=ko.observable().toString().toLowerCase()我以前试过这个。之后,我得到另一个错误:uncaughtreferenceerror:filter未定义。在线“!过滤器”。如果我执行“!self.filter”,则在“If(ko.utils.stringStartsWith(item.Name().toLowerCase()),filter)”行中会出现相同的错误。加上我的过滤器输入填充:“函数d(){if(0Tried)什么之前?Daniel的评论是过滤器是一个字符串-所以你不能像调用函数一样调用它。你对
self.filter()有什么期望
call to do?你想用它实现什么?伙计,我知道它是一个字符串。在第一个例子中,它非常适合匹配整个单词。我请求帮助重新制作它,以便从单词的开头进行匹配,并展示我得到的结果。是的,也许我做得不对,这就是我请求帮助的原因,但你是怎么想的self.filter()
可以吗?为什么要写这行-为什么要尝试对已知为字符串的对象调用函数?您试图实现什么?