我很欣赏 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。你在几行代码中做了很多不同的事情,这在任何语言中看起来都会有点嘈杂。
一些细节:
- 独立使用
@
在 CoffeeScripter 中存在分歧。this
的行为与 JS 中的任何其他构造都非常不同,所以我认为给它一个弹出的符号并提醒你问:“哇,哇,你希望我的意思是我在这次回调之外做了同样的事情吗?” 有一个 open issue如果采用,将允许您编写
$(@).siblings("ul").hide()
作为
$ @ .siblings "ul" .hide()
这也适用于空格,如下所示:
$ @ .siblings "ul" .hide()
你应该去表达你的支持。
关于不带参数的函数调用的括号,另一种方法是编写
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/