【问题标题】:Coding clarity of closure for load event加载事件的关闭编码清晰度
【发布时间】:2013-11-19 06:16:49
【问题描述】:

是否有明确的方法可以为第 4 行的加载事件编写此闭包:

for i,item of m
  # add item once image loaded
  new_item = $("<img src='#{util.image_url(item, 'large')}' />")
  new_item.on 'load', ((item) => (=> @add_item(item)))(item)
  $("#preload-area").append(new_item)

【问题讨论】:

    标签: coding-style coffeescript closures


    【解决方案1】:

    你想要一个do loop

    当使用 JavaScript 循环生成函数时,通常会插入一个闭包包装器以确保循环变量被封闭,并且所有生成的函数不只是共享最终值。 CoffeeScript 提供了 do 关键字,它立即调用传递的函数,转发任何参数。

    类似这样的:

    for i, item of m
      do (item) =>
        new_item = $("<img src='#{util.image_url(item, 'large')}' />")
        new_item.on 'load', => @add_item(item)
        $("#preload-area").append(new_item)        
    

    【讨论】:

    • 没有正确通过this;所以我得到了Uncaught TypeError: Object [object global] has no method 'add_item'
    • 你想要do (item) =&gt;吗?所有箭头和嵌套函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多