use*_*non 1 api coffeescript ruby-on-rails-3
我正在使用rails3.2并使用coffeescript
在我的coffeescript中我有一个for循环和每个,我正在执行API调用以获取结果并将结果附加到相应的dom
喜欢
for ajaxLink in _ajaxRenderLinks
_template = $(ajaxLink).attr('data-link-template')
apiURL = $(ajaxLink).attr('data-link-url')
console.log($(ajaxLink))
Myapp.API.execute(apiURL, 'get', {}, (data) ->
console.log($(ajaxLink))
if data isnt "" or data isnt undefined
console.log($(ajaxLink))
$(ajaxLink).empty()
$(ajaxLink).append($(HandlebarsTemplates[Myapp.TemplateRoutes.path(_template)](data))))
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我有两个链接(一个是链接,另一个是ul链接)ajaxRenderLinks有这些a和ul,它有要呈现的模板和获取结果的url.第一个console.log打印第一个链接a,然后为它运行API调用,然后为它运行APi调用,然后打印第二个链接ul并为其运行API CALl.最后它尝试用第二个链接附加最后一个结果,而不是为每个链接添加附加,因为如果数据不是""或者数据不是未定义的话,它内部的ajaxLink仅打印第二个链接而不打印第一个链接然后打印第二个链接
如何解决这个问题
看起来像经典的"循环变量闭合"情况.因为该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))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
346 次 |
最近记录: |