Подтвердить что ты не робот

CoffeeScript - привязка Переключает события на динамически загруженные объекты с помощью JQuery On

Работа над переписыванием интерфейса моего сайта в Coffeescript. Я понимаю, как связать функцию щелчка с классом.

$('.song').click ->
    //code

Однако я сталкиваюсь с некоторыми проблемами с динамически загружаемым контентом. Я знаю, что в JQuery решение этой задачи заключается в использовании функции "On" следующим образом:

$(document).on('click', '.song', function(){
    //code
});

Но я не уверен, как это переводится в coffeescript. У меня создается впечатление, что стрелка ракеты → преобразуется в анонимную функцию в javascript, но как это работает, если функция является одним из параметров? Я пробовал довольно много разных синтаксисов, и никто из них не работает, спасибо!

4b9b3361

Ответ 1

$(document).on('click', '.song', ( ->
    ### code ###
));

Переводит на этот JavaScript:

$(document).on('click', '.song', (function() {
  /* code */
}));

Обратите внимание, что вы можете использовать оператор => вместо ->; использование двойной стрелки также связывает this с обработчиком события (эквивалент использования jQuery bind).

Ответ 2

Обычно в CoffeeScript не используются скобки, если их порядок выполнения невозможен. Поэтому это можно записать так:

$(document).on 'click', '.song', ->
    ### code ###

Но, конечно, используйте скобки всегда, когда порядок выполнения не очевиден.

Ответ 3

JS2Coffee может помочь с этими типами вопросов:

http://js2coffee.org/

Вам нужно быть немного осторожным с js2coffee, так как иногда он натыкается на довольно сложный JS-код, но он на удивление точным, и обычно он по крайней мере приближается к вам.