筛选SlickGrid时部分匹配

Partial Matches When Filtering SlickGrid

本文关键字:时部 SlickGrid 筛选      更新时间:2023-09-26

由于我没有足够的声誉发表评论,我将这作为一个单独的问题发布。我正在尝试实现用户LFReD给出的解决方案,作为对这个问题的回答:

如何在使用列级标题筛选Slickgrid时执行部分匹配?

当我使用这个从原来的SlickGrid例子:

function filter(item) {
for (var columnId in columnFilters) {
  if (columnId !== undefined && columnFilters[columnId] !== "") {
    var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
    if (item[c.field] != columnFilters[columnId]) {
      return false;
    }
  }
}
return true;
}

当我键入完整的单词时,它就起作用了。不执行部分匹配。

但是,为了执行部分匹配,当我用替换代码时

function filter(item) {
for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
        if (item[c.field].indexOf(columnFilters[columnId]) == -1) {
            return false;
        }
    }
}
    return true;
}

我在控制台中得到错误javascript错误,上面写着"Uncaught TypeError:Object 1没有方法'indexOf'"

我无法弄清楚我的代码中缺少了什么。由于前面的代码运行良好,这意味着我已经在HTML代码中包含了必要的脚本。似乎还是缺少了一些东西。我哪里错了?

更改以下行:

if (item[c.field].indexOf(columnFilters[columnId]) == -1) {

至:

if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {

最终产品:

function filter(item) {
  for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
      var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
      if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {
        return false;
      }
    }
  }
  return true;
}