【问题标题】:Coffeescript jQCloud handlersCoffeescript jQCloud 处理程序
【发布时间】:2013-08-05 05:54:08
【问题描述】:

我正在尝试在咖啡脚本中执行此操作,

http://jsfiddle.net/Q6348/8/

具体来说,我正在尝试将处理程序添加到我的 jQWordCloud 以获取被点击单词的标签

在我的咖啡脚本版本中

while i < @counts.length
  x = @counts[i]
  @tag_list.push
    text: x.label
    weight: x.count
    handlers:
      click: ->
        temp = x
        ->
          alert "it worked for " + temp.label
      ()
  ++i

我收到一个意外的 TERMINATOR 错误,大概是因为 (),但如果您在 jsfiddle 上注意到,删除它会破坏处理程序

【问题讨论】:

    标签: javascript coffeescript visualization


    【解决方案1】:

    解决这个问题的常用 CoffeeScript 方法是使用do

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

    然后只需使用普通的for ... in 而不是while 循环,这样您就不必乱用索引了;更像这样的东西:

    for o in stuff
      do (o) ->
        tag_list.push
          text: o.NAME
          weight: o.COUNT
          html:
            title: "#{o.COUNT} varieties"
          handlers:
            click: -> console.log("it worked for", o)
    

    演示:http://jsfiddle.net/ambiguous/3W9YC/

    或者你可以使用这样的循环理解:

    tag_list = for o in stuff
      do (o) ->
        text: o.NAME
        weight: o.COUNT
        html:
          title: "#{o.COUNT} varieties"
        handlers:
          click: -> console.log("it worked for", o)
    

    并避免push 调用。

    演示:http://jsfiddle.net/ambiguous/3W9YC/1/

    顺便说一句,您可以在 jsfiddle.net 上使用 CoffeeScript,方法是在侧边栏的 Languages 面板中选择它。

    【讨论】:

    • 我不得不做一些小的修改,但这是一个完美的回应,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 2016-11-05
    • 2013-09-28
    • 2012-11-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多