Джордан и Джингерхендрикс оба правы, но позвольте мне на шаг отступить, чтобы рассмотреть более общий вопрос =>
против ->
.
Вы без сомнения видели / использовали код, подобный
$('#foo').hover ->
$(this).css('background-color', '#333')
Почему это работает? Что ж, внутренне, функция наведения jQuery выглядит примерно так (очевидно, сильно стилизовано):
hover: (callback) ->
for el in @
el.onmouseenter = el.onmouseleave = (e) -> callback.call el, e
callback.call el, e
аналогично вызову callback(e)
, за исключением того, что this
указывает на el
внутри вызова этой функции. Вот почему $(this)
дает вам объект jQuery, обернутый вокруг элемента, на котором включено событие hover.
Но это не сработало бы, если бы вы написали
$('#foo').hover => ...
потому что =>
переопределяет call
и apply
; это заставляет this
всегда означать одно и то же, независимо от того, как вызывается функция.
Вот в чем дело: hover
в Backbone оборачивается вокруг hover
в jQuery таким образом, что this
в любом случае указывает на экземпляр View ... так что на самом деле в вашем случае не имеет значения, используете ли вы ->
или =>
. Вот почему они используют $(this.el)
в документах . И это здорово, потому что вы почти наверняка захотите иметь доступ к свойствам представления при обработке событий. Как указал gingerhendrix, this.el
даст вам общий элемент View, а не конкретный элемент, получающий событие hover
; но объект события e
имеет то, что вам нужно (и многое другое).
Подробнее об операторе связанной функции посмотрите мою книгу .