【问题标题】:slickgrid search is not updating sometimesslickgrid 搜索有时不更新
【发布时间】:2013-05-13 13:12:31
【问题描述】:

我在 slickgrid 中为 dataview 模型使用搜索过滤器。它有时可以正常工作,但并非总是如此。

例如,

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

【问题讨论】:

  • @peter - 我已经给出了我的过滤函数的示例算法。

标签: slickgrid


【解决方案1】:

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

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

【讨论】:

  • 是的......我已经包括了......我正在上传我的整个网格代码。可能是我没有在适当的地方包含您的代码。还有一件事....一旦您在搜索某些内容后滚动或排序网格,它就会正确更新。
【解决方案2】:

我解决了......更改已注释。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 2013-05-26
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多