JQuery: как получить оригинальное значение этого в методах - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь создать объектно-ориентированный дизайн с использованием JS и jQuery. У меня есть следующий construstor:

function A () {
  this.url = "some url";

   $("rrr").autocomplete({
    source: function(req, add){
       $.getJSON(this.url, req, function(data) {} ...
}

Как вы уже догадались, я не могу использовать this.url , поскольку jQuery переопределяет this . Я не могу использовать только URL без этого, так как он не объявлен. Что я придумал, так это что-то вроде этого:

function A () {
  this.url = "some url";
  var url = this.url;

   $("rrr").autocomplete({
    source: function(req, add){
       $.getJSON(url, req, function(data) {} ...
}

Но это просто безобразно и работает только для свойств.

Есть ли лучший способ получить значение this из оригинальной области видимости в методах jquery?

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Проблема в том, что ссылка this является ссылкой на объект, вызвавший событие.Хранение ссылки на «это» в вашем классе, когда оно происходит, не является идеальным, но поможет обойти эту проблему (вы можете называть это как угодно, но обычно я называю себя «я» или «это»).

function A () {
  var _this = this;
  _this.url = "some url";


   $("rrr").autocomplete({
    source: function(req, add){
       $.getJSON(_this.url, req, function(data) {} ...
}
2 голосов
/ 14 октября 2010

Вы можете использовать $.proxy() для установки this в контексте функции, например:

function A () {
  this.url = "some url";
  $("rrr").autocomplete({
     source: $.proxy(function(req, add){
               $.getJSON(this.url, req, function(data) {});
             }, this)
  });
}

Или вы можете сделать это длинной рукой, возвращая функцию с установленным контекстом, но, поскольку вам не понравился ваш текущий обходной путь, я предполагаю, что $.proxy() гораздо более привлекательный в ваш случай, и совсем немного здесь, .

...