Javascript 如何保持父母';AJAX请求期间CoffeeScript中的上下文
我想浏览CoffeeScript中的一个对象,并对该对象中的每一项进行AJAX调用(使用jQuery)。在AJAX调用的回调机制中,我想打印导致请求的项的数据,但在回调中,我丢失了对初始上下文的引用。上下文总是相同的:Javascript 如何保持父母';AJAX请求期间CoffeeScript中的上下文,javascript,jquery,ajax,coffeescript,scope,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) ->
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
我如何保持上下文?我已经用
粗箭头尝试了回调,但没有任何帮助。有一个叫做$.proxy
的东西,但是如何使用它呢?好的。我用$.ajax
替换$.get
,然后使用上下文
属性解决了这个问题。但是也有咖啡脚本的方法吗?因为我的解决方案依赖于jQuery
data =
one:
id: 1
two:
id: 2
three:
id: 3
four:
id: 4
five:
id: 5
callback = (data, textStatus, jqXHR) ->
console.log @id
for key, value of data
$.ajax
url: "."
type: "GET"
context: @value
.always(callback)
您还可以将其包装在即时函数中,并在此上下文中存储变量:
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 data, (index, value) ->
callback = (data, textStatus, jqXHR) ->
console.log value.id
$.get ".", callback
这很有帮助。非常感谢。我喜欢使用$。每个