JQueryUI小部件功能范围问题

时间:2011-06-28 16:17:48

标签: javascript jquery-ui widget this slickgrid

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

1 个答案:

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

将范围限制在小部件中。