Как получить доступ к параметрам виджета из события? - PullRequest
0 голосов
/ 29 января 2012
jQuery.widget("ui.test",{
    _init: function(){
        $(this.element).click(this.showPoint);
    },

    showPoint: function(E){
        E.stopPropagation();
        alert(this.options.dir);
    }
}

$('#someEleme').test();

Прямо сейчас, как я написал, объект options не определен внутри showPoint
обработчик события. Как правильно передать это значение в виджете jQuery?

1 Ответ

1 голос
/ 29 января 2012

О контексте, в котором вызывается функция showPoint.В вашем случае вы передали функцию обработчику событий jQuery, и это заставляет jQuery вызывать функцию в контексте элемента event.target.Вы можете перезаписать это, используя jQuery.proxy(), в вашем коде это будет выглядеть так:

jQuery.widget("ui.test",{
    _init: function(){
        $(this.element).click($.proxy(this.showPoint, this));
    },

    showPoint: function(E){
        E.stopPropagation();
        alert(this.options.dir);
    }
}

Обратите внимание, что это перезапишет переменную this внутри функции showPoint, поэтому выбольше не может использовать такие вещи, как $(this).hide(), вам придется использовать $(E.target).hide() или на самом деле $(this.element).hide().

...