表filter不使用退格键

在此处输入图像描述

我正在根据http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html上的内置搜索function,使用handontable复制一个实时filter框。

现在我有一个基本的设置工作在http://jsfiddle.net/uL3L4teL/4/

如文档中所述,在此代码中,如果输入搜索字符串,则使用以下函数获取输出到控制台的匹配单元格:

Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) { var queryResult = hot.search.query(this.value); console.log(queryResult); // ... }); 

我想抓住数据数组中与搜索字符串匹配的行,并在重新显示表之前通过搜索字符串过滤原始数据“数据”。 这部分工作使用:

 Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) { // debugger hot.loadData(tData); var queryResult = hot.search.query(this.value); rows = getRowsFromObjects(queryResult); console.log('searchFiled',searchFiled.value); console.log('rows',rows); console.log('tData', tData); var filtered = tData.filter(function (d, ix) { return rows.indexOf(ix) >= 0; }); console.log('filtered', filtered); hot.loadData(filtered); }); 

但是当我运行这个时,我在控制台中看到以下内容,当我输入’n’后跟退格(清空搜索字符串)时:

输入’n’:

 rows [0, 1] searchFiled n rows [0, 1] tData [Array[4], Array[4], Array[4], Array[4]] filtered [Array[4], Array[4]] 

退格(以清空搜索值):

 rows [] searchFiled rows [] tData [Array[4], Array[4], Array[4], Array[4]] filtered [] 

我该如何解决这个问题,以便空字符串再次显示整个未过滤的表格?

您可以在.filter()方法中添加一个条件,如果值searchFiled.value为空或未定义,它将返回所有行:

更新的示例

 var filtered = tData.filter(function(_, index) { if (searchFiled.value) { return rows.indexOf(index) >= 0; } else { return true; } }); 

或者,这里是一个单行,做同样的事情(虽然它不太可读):

更新的示例

 var filtered = tData.filter(function(_, index) { return !searchFiled.value || rows.indexOf(index) >= 0; });