Проблема области действия виджета JQueryUI

Я не уверен, как точно описать эту проблему, но я делаю виджет JQueryUI из очень полезного плагина SlickGrid JQuery. 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.


person Chris McCall    schedule 28.06.2011    source источник


Ответы (1)


Не уверен, что это лучший ответ, но вот что я придумал:

По совету на 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);

Который привязал область действия к виджету.

person Chris McCall    schedule 28.06.2011