Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Контекста выполнения хэндлера события (https://javascript.ru/forum/jquery/2816-konteksta-vypolneniya-khehndlera-sobytiya.html)

hogart 13.02.2009 16:52

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

Есть некий обьект, (назовем его myObj) в котором я реализовал нужную мне функциональность. Один из его методов (назовем его myFunc) вызывается в качестве обработчика события.
И, поскольку этот метод опирается на другие методы этого обьекта, он должен вызываться как метод обьекта. То есть внутри него this должен ссылаться не на ноду, а на myObj.

Приходится делать так:
this.form.bind('submit', {that: this}, function(evt) {
	that = evt.data.that
	evt.preventDefault();
	that.myFunc.apply(that, [that.inputs])
})

Но это кажется мне несколько неизящным.

Либо на jQuery пишут не так (а как тогда на нем пишут масштабные приложения?), либо я что-то упустил в документации.

Андрей Параничев 13.02.2009 22:36

hogart,
that.myFunc.apply(that, [that.inputs])

that.myFunc(that.inputs)

Это абсолютно одно и тоже.

Если вы хотите поставить в качестве обработчика метод myFunc объекта myObj, то вам в любом случае (не важно, jQuery, или native JS) придется обернуть его в замыкание.

hogart 13.02.2009 23:56

Цитата:

Сообщение от Андрей Параничев (Сообщение 12629)
Это абсолютно одно и тоже.

Не уверен. myFunc обрабатывает только первый аргумент, каковой ожидается быть массивом jQuery обьектов.
(Мда, фигня какая-то. Переделаю.)

Цитата:

Сообщение от Андрей Параничев (Сообщение 12629)
Если вы хотите поставить в качестве обработчика метод myFunc объекта myObj, то вам в любом случае (не важно, jQuery, или native JS) придется обернуть его в замыкание.

Да. Просто есть фреймворки, которые позволяют это делать сразу при навешивании обработчика. До этого я работал с таким.

Kolyaj 14.02.2009 21:55

Цитата:

Сообщение от hogart
До этого я работал с таким.

Ну так задайте функциям метод а-ля bind/createDelegate. Там три строчки.


Часовой пояс GMT +3, время: 22:37.