2009-08-07 7 views
6

J'essaie de configurer un rappel dans jQuery qui lie correctement "ceci" à l'objet appelant. Plus précisément, voici le code avec lequel je travaille. Je fais un appel ajax dans un objet comme celui-ci:Comment lier "this" pour les rappels jQuery?

Object.prototype.doAjaxCall = function(url) 
    { 
     $.get(url, null, this.handleAjaxResponse); 
    } 

Cependant, Object.prototype.doAjaxCall, this ne fait pas référence à la chose correcte. J'ai déjà travaillé avec Prototype et je sais que vous devez lier ceci quand vous faites l'appel Ajax, mais je ne peux pas sembler trouver la bonne manière de le faire dans jQuery. Quelqu'un peut me diriger dans la bonne direction?

Répondre

1

Une fonction de liaison native plus robuste devrait faire partie d'ECMAScript 3.1. En attendant ...

Object.prototype.doAjaxCall = function(url) { 
    var bind = function(context, method) { 
     return function() { 
      return method.apply(context, arguments); 
     }; 
    }; 

    $.get(url, null, bind(this, this.handleAjaxResponse)); 
}; 
2

Utilisez le jQuery ajaxcontext propriété de lier cela. par exemple:

$.ajax({ 
    context: this, 
    url: url, 
    type: 'GET' 
}).done(function(data, textStatus, jqXHR) { 
    this.handleAjaxResponse(); 
}); 
Questions connexes