Ruby on rails 3 咖啡脚本中的For循环

Ruby on rails 3 咖啡脚本中的For循环,ruby-on-rails-3,api,coffeescript,Ruby On Rails 3,Api,Coffeescript,我正在使用rails3.2和coffeescript 在我的coffeescript中,我有一个for循环,对于每个循环,我都执行一个API调用来获取结果,并将结果附加到相应的dom中 像 在上面的代码中,我有两个链接(一个是链接,另一个是ul链接) ajaxRenderLinks有一个和一个ul,ul有它要呈现的模板和获取结果的url。 first console.log打印第一个链接a,然后为其运行API调用,然后为其运行API调用 然后它打印第二个链接ul并为其运行API调用。最后,它尝试

我正在使用rails3.2和coffeescript

在我的coffeescript中,我有一个for循环,对于每个循环,我都执行一个API调用来获取结果,并将结果附加到相应的dom中

在上面的代码中,我有两个链接(一个是链接,另一个是ul链接) ajaxRenderLinks有一个和一个ul,ul有它要呈现的模板和获取结果的url。 first console.log打印第一个链接a,然后为其运行API调用,然后为其运行API调用 然后它打印第二个链接ul并为其运行API调用。最后,它尝试将最后一个结果附加到第二个链接中,而不是对每个链接进行附加,因为如果数据不是“”,或者数据不是未定义的,它会在内部添加一个链接,只打印第二个链接,而不打印第一个链接,然后再打印第二个链接

如何解决这个问题看起来像是典型的“循环中的变量闭包”情况。因为
execute
函数是异步的,所以它引用了
ajaxLink
,它会随着循环的变化而变化。因此,当调用
execute
的回调时,
ajaxLink
可能与调用
execute
本身时不同

试试这个

for ajaxLink in _ajaxRenderLinks
  do (ajaxLink) ->         # wrap in an immediately-invoked function
    ajaxLink = $(ajaxLink) # save this rather than calling $(...) again and again
    _template = ajaxLink.attr('data-link-template')
    apiURL = ajaxLink.attr('data-link-url')
    Myapp.API.execute(apiURL, 'get', {}, (data) ->
      if data? and data isnt ""
        ajaxLink.empty().append($(HandlebarsTemplates[Myapp.TemplateRoutes.path(_template)](data))))
看起来像是典型的“循环中的变量闭包”情况。因为
execute
函数是异步的,所以它引用了
ajaxLink
,它会随着循环的变化而变化。因此,当调用
execute
的回调时,
ajaxLink
可能与调用
execute
本身时不同

试试这个

for ajaxLink in _ajaxRenderLinks
  do (ajaxLink) ->         # wrap in an immediately-invoked function
    ajaxLink = $(ajaxLink) # save this rather than calling $(...) again and again
    _template = ajaxLink.attr('data-link-template')
    apiURL = ajaxLink.attr('data-link-url')
    Myapp.API.execute(apiURL, 'get', {}, (data) ->
      if data? and data isnt ""
        ajaxLink.empty().append($(HandlebarsTemplates[Myapp.TemplateRoutes.path(_template)](data))))

+我对这个很感兴趣。有关在具有异步行为的循环中使用
do
的详细信息,请参阅我的文章。@TrevorBurnham谢谢!这本书是作者写的(我发誓,我一直想读!),这是一个非常重要的+1:)+我对这个很感兴趣。有关在具有异步行为的循环中使用
do
的详细信息,请参阅我的文章。@TrevorBurnham谢谢!这本书是作者写的(我发誓,我一直想读!),这是一个非常重要的+1:)