Как зарегистрировать событие Jquery click с coffeescript на рейках 3.1
Я пытаюсь сделать то, что кажется, должно быть простым, но по какой-то причине ускользает от меня. Я хочу добавить событие click к ссылке в файле tasks.js следующим образом:
$ ->
$('.cancel_task').click ->
$('#task_form').toggle
Это отображается как:
(function() {
$(function() {
return $('.cancel_task').click(function() {
return $('#task_form').toggle;
});
});
}).call(this);
Все, что я хочу, это что-то вроде:
$('.cancel_task').click(function()
{
$('#task_form').toggle();
});
Как это сделать с помощью coffescript и rails 3.1 stack?
Ответы
Ответ 1
Кофе должен обернуть все, что вы делаете, в ограниченном объеме, чтобы вы не заполняли мир глобальными. Это полезно, если у вас нет, не игнорируйте это. На верхнем уровне вы можете экспортировать с помощью this.something = "value"
.
Теперь ваш код выше не работает, потому что для вызова функций нужен паз, когда нет параметров. Это сделает два snip - его функционально одинаковым. Функции являются переменными в JavaScript, поэтому он просто предполагает, что вы хотите вернуть эту функцию вместо результата без парнеров.
$ ->
$('.cancel_task').click ->
$('#task_form').toggle()
Наконец, функция Coffee всегда возвращает последнее значение функции. Это просто, как это работает. Поэтому не беспокойтесь о операторах return
, вы всегда можете проигнорировать результаты.
Ответ 2
Второй фрагмент, который вы опубликовали, - это правильный вывод из coffee
, а второй и последний фрагменты, которые вы опубликовали, функционально эквивалентны. Если вы хотите, вы можете избавиться от закрытия верхнего уровня, используя опцию coffee
--bare
(это задокументировано), но в противном случае вы не должны беспокоиться о выходе CoffeeScript, если это не вызовет проблем.