我正在根据http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html的内置搜索功能,使用handontable复制一个实时过滤器框。
现在我正在使用文档中最简单的用例(http://jsfiddle.net/kc11/uL3L4teL/)。
如文档中所述,在此代码中,如果输入搜索字符串,则使用以下函数获取输出到控制台的匹配单元格:
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
hot.render();
我想抓取数据数组中与搜索字符串匹配的行,并在重新显示表之前通过搜索字符串过滤原始数据“数据”。这部分可以使用:
Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
var queryResult = hot.search.query(this.value);
console.log(queryResult);
rows = getRowsFromObjects(queryResult);
console.log('hot', hot.getData());
console.log('data', data);
var data = hot.getData();
var filtered = data.filter(function(d, ix) { return rows.indexOf(ix) >= 0; });
console.log('filtered', filtered);
hot.loadData(filtered);
});
正如您在http://jsfiddle.net/uL3L4teL/2/中所看到的,但我需要替换
var data = hot.getData();
(一个获取表格中当前数据的指法函数),其中包含全局“数据”(在顶部定义),供搜索工作。但是函数中的全局数据未定义。我该如何解决这个问题?
答案 0 :(得分:0)
如果"全球"你所指的数据变量"在顶部"是这个
var
data = [
['Nissan', 2012, 'black', 'black'],
['Nissan', 2013, 'blue', 'blue'],
['Chrysler', 2014, 'yellow', 'black'],
['Volvo', 2015, 'yellow', 'gray']
]
那不是全球性的。该变量是DOMContentLoaded事件处理函数的本地变量。我假设即使你在同一个块中声明了其他事件处理程序,它们也会被调用不同的范围,使得该变量不可用。正如评论中所建议的那样,您可以将其分配给全局变量(如窗口),或者只在全局范围内声明它。