Как получить this объекта в обработчике для события click в jquery? - PullRequest
0 голосов
/ 17 декабря 2010
// begin signals
this.loginSignal

this.init = function(){
  // init signals
  this.loginSignal = new t.store.helpers.Signal;

  // map events
  $('[value]="login"', this.node).click(this.login)
}

this.login = function(){
  // this will dispatch an event that will be catched by the controller
  // but this is not refering to this class
  // and the next line fails :s
  this.loginSignal.dispatch();
}

, чтобы заставить его работать сейчас, я должен добавить

var $this = this;

эту строку и использовать $this вместо this: S

какой-нибудь более понятный способ?спасибо

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Техника 1: использование замыкания

var me = this;
$(...).click(function(){ me.login(); });

Техника 2: Получить элемент, который обработал событие

this.login = function(evt){
  var el = evt.currentTarget || evt.target || evt.srcElement;
  // Do something with the element here.
};
1 голос
/ 17 декабря 2010

jQuery имеет метод с именем jQuery.proxy(), который используется для возврата функции со значением this, установленным на то, что вы хотите.

$('[value="login"]', this.node).click( $.proxy(login, this) );
1 голос
/ 17 декабря 2010

Когда вызывается обработчик щелчка, ключевое слово this сопоставляется с элементом, вызвавшим событие. Чтобы добраться до исходного объекта, вы хотите поместить код функции в замыкание и сделать ссылку на объект вне замыкания, где у вас все еще есть правильная ссылка на this.

  // map events
  var thisObject = this;
  $('[value]="login"', this.node).click(function () {
     thisObject.loginSignal.dispatch();
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...