我想遍历 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/