jquery $(这个)不适用于咖啡脚本/骨干

cof*_*ime 4 jquery coffeescript backbone.js

我最近开始使用Brunch和Backbone和CoffeeScript一起玩,并且想知道为什么会这样......

events: {
  "click .button" : "open",
  "hover .info"   : "hover"
},

hover: =>
  $(this).css("background-color", "#333")
Run Code Online (Sandbox Code Playgroud)

..不行.

根据我的理解,CoffeeScript有自己的版本this可能与jQuery使用的版本冲突但在文档中我认为=>它将它绑定到当前对象.我也尝试过->无济于事.为什么这不起作用的任何想法?

HTML:

<div id='outer'> 
   <div class='.info'> <a href='google.com'> google </a> </div> 
   <div class='.info'> <a href='google.com'> google </a> </div> 
   <div class='.info'> <a href='google.com'> google </a> </div> 
</div>
Run Code Online (Sandbox Code Playgroud)

Jor*_*ing 8

来自文档:

在传递给jQuery之前,所有附加的回调都绑定到视图,因此在调用回调时,this继续引用视图对象.

如果this是视图对象(而不是HTML元素),$(this)则相当无意义.我相信,你想要做的是传递视图所指的元素$,例如:

hover: =>
  $(this.el).css("background-color", "#333")
  # -----^
Run Code Online (Sandbox Code Playgroud)


小智 5

乔丹的回答是正确的 - 如果你想让视图的元素使用this.el.

在您的情况下,您需要触发事件的元素,即.info元素.这可以通过event.currentTarget 1检索

hover: (e) =>
  $(e.currentTarget).css("background-color", "#333")
Run Code Online (Sandbox Code Playgroud)