SlickGrid - 使关键字搜索过滤器工作

时间:2012-11-02 19:22:40

标签: jquery search slickgrid

我正在尝试为我正在开发的项目选择SlickGrid,我开始尝试重新创建开箱即用的示例,除了随机生成的数据和CSS。目前唯一不起作用的是搜索功能。如果你们中的一些人可以查看我的代码并告诉我是否有什么我做错了,我将非常感激。这是链接:http://www.tomryandesign.com/dev/datagrid/custom2/

2 个答案:

答案 0 :(得分:0)

试试这个说明性的例子。

var dataView = new Slick.Data.DataView();
var slickGrid = new Slick.Grid($('#grid_div'), dataView, gridColumns, gridOptions);
//Keyup event on search selector..
$('#search').keyup(function(e) {
 // clear on Esc
  if (e.which == 27) {
   this.value = "";
  }

  var searchList = $.trim(this.value.toLowerCase()).split(' ');
  dataView.setFilter(gridFilter);  
  slickGrid.invalidate();
  this.focus();

});
//This is custom logic for grid Filtering..
function gridFilter (rec) {
            var found;

            for (i = 0; i < gridSearchList.length; i += 1) {
                found = false;
                $.each(rec, function(obj, objValue) {
                    if (typeof objValue !== 'undefined' && objValue != null 
                    && objValue.toString().toLowerCase().indexOf(gridSearchList[i]) != -1) {
                        found = true;
                        return false; //this breaks the $.each loop
                    }
                });
                if (!found) {
                    return false;
                }
            }

            return true;
        }

这应该适合您的要求。

祝你好运.Niks

答案 1 :(得分:0)

在触发器部分中,添加以下内容:

$('#search').keyup(function(e) {
    if(e.which === 27) {   // clear on esc
        this.value = '';    
    }

    dataView.setFilter(gridFilter);
    slickGrid.invalidate();
 });

**//create a function gridFilter**

function gridFilter (rec) {
        var found,
            searchData = $.trim($('#search').val()).toLowerCase().split(' ');
    for (i = 0; i < searchData.length; i += 1) {
        found = false;
        $.each(rec, function(obj, objValue) {       
        if (typeof objValue !== 'undefined' && objValue != null && objValue.toString().toLowerCase().indexOf(searchData[i]) != -1) {
            found = true;
            return false; //this breaks the $.each loop
        }
    });
    if (!found) {
        return false;
    }
  }
    return true;        
}