slickgrid搜索有时不会更新

时间:2013-05-13 13:12:31

标签: slickgrid

我在slickgrid中使用搜索过滤器来获取数据视图模型。它有时很好但不总是有效。

例如,

(1)我的网格有4行。

(2)当我搜索第一行时,其他3行被删除(这是正确的)。

(3)但是,如果我删除我的搜索文本,理想情况下应该显示所有4行,但我的网格显示4行,其中包含先前搜索过的行两次。

我哪里错了?

这是我的过滤功能代码:

function myFilter(item, args) {

    if(item["myColumn"].toString().toLowerCase().indexOf(args.searchString.toLowerCase()) == -1){
      return false;
    } else {
      return true;
    }
 }

网格创建代码:

dataView = new Slick.Data.DataView();
        grid = new Slick.Grid("#gridbox", dataView, columns, options);
        grid.setSelectionModel(new Slick.RowSelectionModel());

         // initialize the model after all the events have been hooked up
          dataView.beginUpdate();
          dataView.setItems(data);
          dataView.setFilterArgs({
              searchString: searchString
          });
          dataView.setFilter(myFilter);
          dataView.endUpdate();
          grid.render();

        grid.onSort.subscribe(function(e, args) {
            var cols = args.sortCols;

            dataView.sort(function(dataRow1, dataRow2) {
                        for (i = 0, l = cols.length; i < l; i++) {
                            var field = cols[i].sortCol.field;
                            var sign = cols[i].sortAsc ? 1 : -1;

                            var value1 = dataRow1[field], value2 = dataRow2[field];

                            if((field.indexOf('providerName') != -1) || (field.indexOf('serviceAddress') != -1))
                            {
                                value1 = value1.toLowerCase();
                                value2 = value2.toLowerCase();
                            }

                            if(field.indexOf('providerName') != -1)
                            {
                                value1 = value1.replace(/[0-9]*/,'');
                                value2 = value2.replace(/[0-9]*/,'');
                            }

                            var result = (value1 == value2 ? 0
                                    : (value1 > value2 ? 1 : -1))
                                    * sign;
                            if (result != 0) {
                                return result;
                            }
                        }
                        return 0;
                    });
            grid.invalidate();
            grid.render();
            bindClickOnRowCB();     
        });

        grid.onScroll.subscribe(function(e) {
            grid.invalidate();
            grid.render();
            bindClickOnRowCB();     
        });

         // wire up model events to drive the grid
          dataView.onRowCountChanged.subscribe(function (e, args) {
            grid.updateRowCount();
            grid.render();
          });

          dataView.onRowsChanged.subscribe(function (e, args) {
            grid.invalidateRows(args.rows);
            grid.render();
          });

        // wire up the search textbox to apply the filter to the model
          $("#txtSearch").keyup(function (e) {
            Slick.GlobalEditorLock.cancelCurrentEdit();

           // clear on Esc
            if (e.which == 27) {
              this.value = "";
            }
            searchString = this.value;

            updateFilter();
          });

2 个答案:

答案 0 :(得分:0)

如果您发布更多代码会有所帮助,我想您在清除过滤器后执行dataView.refresh()会有所帮助吗?你有这个吗?

dataView.onRowCountChanged.subscribe(function (e, args) {
  grid.updateRowCount();
  grid.render();
});

答案 1 :(得分:0)

我解决了......评论的变化。

dataView.onRowCountChanged.subscribe(function (e, args) {
        grid.updateRowCount();
        grid.invalidate();           //   added
        grid.render();
      });
dataView.onRowsChanged.subscribe(function (e, args) {
        grid.invalidateRows(args.rows);
        grid.invalidate();           //   added
        grid.render();
      });