Заставить jQuery .on() работать с Rails 3

Я создаю приложение Rails 3 и пытаюсь заставить работать функцию jQuery .on(). В настоящее время ничего не делает.

В активах/javascripts/v-application.js:

console.log('application');

$('body').on('click', function(){
  alert('test');
});

Когда приложение загружается, в консоли отображается «приложение» (как и должно быть), но когда я нажимаю на тело, предупреждения не срабатывают. Если я вставлю тот же самый javascript в консоль и нажму на тело, сработает соответствующее предупреждение.

Если я просматриваю v-application.js в браузере, он показывает функцию.

Я использую последние версии jquery-rails (2.0.1) и rails (3.2.2). Это все в среде разработки.

Что происходит, что Rails не знает, как обрабатывать этот базовый вызов функции? Связано ли это с конвейером активов? Как я могу заставить это работать?


person charliepark    schedule 05.03.2012    source источник
comment
У вас есть готовая функция?   -  person loganfsmyth    schedule 05.03.2012
comment
Не уверен, что вы подразумеваете под Rails, не зная, как с этим справиться, это имеет мало общего с Rails. В консоли JS есть что-нибудь?   -  person Dave Newton    schedule 05.03.2012


Ответы (2)


Я предполагаю, что у вас нет готовой функции.

$(function() {
  $('body').on('click', function(){
    alert('test');
  });
});

Если вы засунете код прямо в основной JS-файл, выполнение $('body') ничего не найдет, потому что при интерпретации тега script тег body еще не обработан. Вставка логики в готовую функцию будет ждать, пока весь документ будет проанализирован.

person loganfsmyth    schedule 05.03.2012
comment
Вот оно. Раньше у меня была готовая функция, но у меня были другие проблемы, и я удалил все, чтобы уменьшить сложность и изолировать проблему. И, конечно же, я внес в стек новую задачу. - person charliepark; 05.03.2012
comment
Ах да, создавать одну проблему, чтобы решить другую, это самое худшее: P Рад помочь. - person loganfsmyth; 05.03.2012

Вы используете jQuery 1.7.1? Вот тогда и появился .on, у которого раньше была проблема.

jsFiddle здесь: http://jsfiddle.net/LmC6x/

Однако, как сказал @loganfsmyth, я бы рекомендовал использовать готовую функцию.

person Chris Dixon    schedule 05.03.2012