Пользовательский интерфейс JQuery: привязать обработчик к методу: невозможно получить элементы? - PullRequest
0 голосов
/ 22 июня 2011

Я создаю небольшой виджет JQuery UI, в котором привязываю обработчик к элементу:

this.element.bind("keyup", { list: this.container }, this._filter);

Виджет имеет опции:

options:
{
    dataUrl: '',
    isEnabled: true
},
_filter: function (event)
{
    var input = $(this);
    var that = this;
    alert(that.options.isEnabled);
    if (that.options.enabled) {
        that.container.show();
        event.data.list.find("li").each(function () {
            if ($(this).text().toLowerCase().indexOf(input.val().toLowerCase()) < 0) {
                $(this).hide();
            }
            else {
                $(this).show();
            }
         });
     }
 },

Но когда я предупреждаю об одном из параметров в _filter, я получаю сообщение об ошибке: "that.options не определен" То же самое для любого другого элемента, к которому я пытаюсь получить доступ / использовать, например, если функция была в состоянии получить только то, что определено внутри, или из передаваемой eventData.

Я что-то упустил? Спасибо

1 Ответ

1 голос
/ 22 июня 2011

Проблема в том, что область действия / контекст / эта функции слушателя (_filter) - это объект jQuery, с которым она также была связана.В этом случае функция this в _filter фактически ссылается на this.element виджета, когда вызывается как прослушиватель событий.Что вы можете сделать, это следующее:

this.element.bind("keyup", { list: this.container }, $.proxy(this, "_filter"));

То, что делает прокси-метод, в основном заключается в переносе функции, которая будет применяться в определенном контексте ( см. Документацию ).Хорошая особенность прокси-сервера заключается в том, что вы можете отменить привязку с помощью оригинальной функции, например:

this.element.unbind("keyup", this._filter);

Надеюсь, это поможет.

...