我不确定如何描述这个问题,但我正在用非常有用的SlickGrid JQuery插件制作一个JQueryUI小部件。 Slickgrid允许设置用作“过滤器”的函数,以便在客户端上搜索行。像这样......
_filter: function (item) {
if (this.options.searchString == null)
{ return true; }
if (this.options.searchString.length == 0)
{ return true; }
for (var prop in item) {
if (item[prop] != null) {
if (item[prop].toString().toLowerCase().indexOf(searchString.toLowerCase()) > -1)
{ return true; }
}
}
return false;
}
self.options.dataView.setFilter(self._filter);
我的问题是,一旦_filter
被调用,this
被设置为窗口元素,并且不再拥有对窗口小部件的引用,因此我的所有选项都不可用。如何告诉_filter
用户在网格中搜索的字词?
难度:页面上会有多个小部件实例,每个实例都有自己独立的过滤器。另外,我不想修改SlickGrid的工作方式。
答案 0 :(得分:0)
不确定这是否是最好的答案,但这就是我想出的:
通过http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/上的建议,在我的创建函数中,我写了
this._filter = function (item) {
if (this.options.searchString == null)
{ return true; }
if (this.options.searchString.length == 0)
{ return true; }
for (var prop in item) {
if (item[prop] != null) {
if (item[prop].toString().toLowerCase().indexOf(this.options.searchString.toLowerCase()) > -1)
{ return true; }
}
}
return false;
} .bind(this);
将范围限制在小部件中。