Возвращение экземпляра класса в обратный вызов jquery.ajax - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь заставить jQuery.ajax перезвонить вызывающему экземпляру для обработки сообщений. Однако я не могу получить вызывающий экземпляр в функцию.

В вызове GetHistory возвращается список сообщений, и я хочу, чтобы метод Process действовал для каждого из них. Проблема заключается в том, что во время выполнения функции обратного вызова возвращается ошибка с указанием «this.Process не определен». Вот почему я предполагаю, что экземпляр не устанавливается.

Я также попытался добавить параметр в .ajax «context: this», но это не помогло.

class MessageHandler

  @messages: []

  Process: (message) ->
      messages.push message

  GetHistory: ->    
    jQuery.ajax url:'/home/BidDetail', dataType: 'json', data: 'auctionId=1', success:     (data) ->
      @Process record for record in data.records when record.type == 'BID'

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

Пробовали ли вы использовать => (жирная стрелка ), как указано в Область действия переменной Coffeescript / Javascript ?

0 голосов
/ 16 августа 2011

Я удивлен, что context: this не работает.Вы должны иметь возможность либо использовать это, либо использовать =>, как полагает Пол (наиболее лаконично), либо использовать классический self = this (более эффективный):

GetHistory: ->    
  self = this
  jQuery.ajax url:'/home/BidDetail', dataType: 'json', data: 'auctionId=1', success: (data) ->
    self.Process record for record in data.records when record.type == 'BID'

Обратите внимание, что я предполагаю, чтовы звоните GetHistory с синтаксисом obj.GetHistory(), где obj - это объект, на который вы хотите this указать в обратном вызове success.Возможно, вы захотите определить GetHistory с помощью => вместо ->, чтобы, даже если вы отсоедините его от экземпляра класса, контекст останется прежним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...