【问题标题】:Getting class instance back on jquery.ajax callback在 jquery.ajax 回调上获取类实例
【发布时间】:2011-08-25 00:44:21
【问题描述】:

我正在尝试让 jQuery.ajax 回调调用实例来处理消息。但是,我无法将调用实例放入函数中。

在 GetHistory 调用中,会返回一个消息列表,我希望 Process 方法对每一个消息进行操作。问题是在回调函数执行期间会返回一个错误,说明“this.Process is undefined”。这就是我猜测没有设置实例的原因。

我也尝试将参数添加到 'context:this' 的 .ajax 中,但这似乎没有帮助。

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'

【问题讨论】:

    标签: jquery coffeescript


    【解决方案1】:

    您是否尝试过按照Coffeescript/Javascript variable scope 中的建议使用 =>(fat arrow)?

    【讨论】:

      【解决方案2】:

      我很惊讶context: this 不起作用。您应该可以使用它,或者按照 Paul 的建议使用 =>(最简洁),或者使用经典的 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'
      

      请注意,我假设您使用语法obj.GetHistory() 调用GetHistory,其中obj 是您希望thissuccess 回调中指向的对象。您可能希望使用 => 而不是 -> 来定义 GetHistory,这样即使您将其与类实例分离,上下文仍然是相同的。

      【讨论】:

      • 谢谢 - 我在想 'this' 在 ajax 回调的上下文中会有所不同。
      • @S.赫伯特尔,是的。抱歉,我已经更正了答案中的代码。
      猜你喜欢
      • 2019-07-18
      • 2013-04-20
      • 2012-12-09
      • 2019-11-19
      • 2018-07-04
      • 1970-01-01
      • 2021-08-26
      • 2010-10-05
      • 2017-04-22
      相关资源
      最近更新 更多