javascript - CoffeeScript/jQuery 语法可以更简单吗?

标签 javascript jquery coffeescript

我很欣赏 CoffeeScript 语法如何帮助编写回调函数并使 jQuery 语法更轻便。但是,我仍然对经典的 $(".foo") 构造感到困扰:只有 3 个“有意义的”字符有 6 个符号!不幸的是,据我所知,CoffeeScript 无法简化此语法。或者可以吗?你有 jQuery/CoffeeScript gem 可以分享吗?或者是否有一些 CoffeScript 库旨在使 jQuery 的使用更轻松?

作为练习,我们能否使这段代码更简单一些?

$ ->                                        # nice!
  $('.menu').hide()                         # no benefit over JS ?
  $('.sub').hover -> 
    offset = $(@).offset()                  # $(@) is $(this) but the syntax feels awkward
    submenu = $(@).siblings "ul"            # optional parens...
    submenu.css 
      left: offset.left + $(@).outerWidth()
      top: offset.top
    submenu.show()                          # can't get rid of parenthesis ?
  , ->                                      # weird
    $(@).siblings("ul").hide()              # ...in this case, non-optional parens

最佳答案

我发现您的代码原样是非常好的 CoffeeScript,solendil。你在几行代码中做了很多不同的事情,这在任何语言中看起来都会有点嘈杂。

一些细节:

  1. 独立使用 @ 在 CoffeeScripter 中存在分歧。 this 的行为与 JS 中的任何其他构造都非常不同,所以我认为给它一个弹出的符号并提醒你问:“哇,哇,你希望我的意思是我在这次回调之外做了同样的事情吗?”
  2. 有一个 open issue如果采用,将允许您编写

    $(@).siblings("ul").hide()
    

    作为

    $ @ .siblings "ul" .hide()
    

    这也适用于空格,如下所示:

    $ @
    .siblings "ul"
    .hide()
    

    你应该去表达你的支持。

  3. 关于不带参数的函数调用的括号,另一种方法是编写do func,它会编译为func()。我不推荐这个。

至于

However, I'm still bothered by the classic $(".foo") construct: there are 6 symbols for only 3 "meaningful" characters!

怎么会这样?至少,$(一个函数名)和.foo(一个选择器字符串)组成了 4 个有意义的字符。而且我还没有在任何主流语言中看到字符串定界符的替代品。所以我想说那里有意义的字符比例非常好。 :)

关于javascript - CoffeeScript/jQuery 语法可以更简单吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917303/

相关文章:

javascript - 在 Codemirror 上显示 CoffeeScript Lint

javascript - Zepto 中的绑定(bind)事件

javascript - 如何在ajax调用后为select分配选项值

javascript - === 参数的多个实例的效率?

javascript - 使用 three.js 自定义形状

JQuery Sortable 以编程方式将项目设置为索引

jQuery ajaxStart 与唯一元素绑定(bind)

javascript - 数字未正确增加

javascript - 当用户单击一个选项时,用勾号或 html 中的任何内容标记它

backbone.js - 如何使用 Marionette 创建全局按键事件监听器