javascript - 如何在 AJAX 请求期间将父上下文保存在 CoffeeScript 中

标签 javascript jquery ajax coffeescript scope

我想遍历 CoffeeScript 中的一个对象,并且我想对该对象中的每个项目进行 AJAX 调用(使用 jQuery)。在 AJAX 调用的回调机制中,我想打印导致请求的项目的数据,但在我的回调中,我丢失了对初始上下文的引用。上下文始终相同:

data = 
  one: 
    id: 1
  two:
    id: 2
  three:
    id: 3
  four:
    id: 4
  five:
    id: 5

callback = (data, textStatus, jqXHR) ->    
  console.log value.id # It's always "5" :-(

for key, value of data
  $.get ".", callback

如何保留上下文?我已经尝试使用 fat arrow 进行回调,但这没有帮助。 I read有一个叫做 $.proxy 的东西,但是如何使用它呢?

最佳答案

您也可以将它包装在立即函数中,并在此上下文中存储一个变量:

for key, value of data
  (->
    val = value
    callback = (data, textStatus, jqXHR) ->    
      console.log val.id
    $.get ".", callback
  )()

请注意,使用此方法时,您必须先声明回调,然后再调用它。

但可能最“coffeescript 方式”是使用 do 关键字,它立即调用传递的函数,转发任何参数:

for key, value of data
  do (value)->
    callback = (data, textStatus, jqXHR) ->    
      console.log value.id
    $.get ".", callback

实现此目的的另一种方法是使用 jQuery 的 each迭代函数:

$.each data, (index, value) ->
  callback = (data, textStatus, jqXHR) ->    
    console.log value.id
  $.get ".", callback

关于javascript - 如何在 AJAX 请求期间将父上下文保存在 CoffeeScript 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138957/

相关文章:

javascript - Sencha-touch : save login/password (save session, 多任务)

作为字符串的 javascript 命名空间

jQuery:当通过 AJAX 加载时,fadeout() 无法处理绝对定位的元素

javascript - 如何从div获取内部id/class?

javascript - 如何通过 javascript(chrome 扩展)将文本从一个选项卡复制并粘贴到另一个选项卡?

javascript - 在javascript中使用正则表达式将每个前导和尾随空格替换为下划线

javascript - 使用嵌套 PHP 动态创建的目标 HTML 元素

jquery 将一个标签放在其他标签周围

php - 在模式框中显示表单(简单的 php 文件)?

javascript - Ionic 应用程序上的 navigator.onLine