1

我不确定如何描述这个问题,但我正在用非常有用的 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 的工作方式。

4

1 回答 1

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

它将范围绑定到小部件。

于 2011-06-28T18:13:52.553 回答