Я думаю, что я упускаю какой-то фундаментальный аспект того, как Javascript обрабатывается Rails.
Я создал новый проект Rails с использованием Ruby 2.1.0.
$ mkdir whatishappening
$ cd whatishappening
$ rails new .
$ rails generate scaffold post title body:text
$ rails db:migrate
$ rails server
Затем я приступил к созданию тестового сообщения. После этого я добавил:
whatishappening/приложение/просмотров/сообщений /show.html.erb
<a href="#" id="foo">link</a>
whatishappening/app/assets/javascripts/posts.js (я переименовал это из posts.js.coffee)
console.log("posts.js loaded");
$("#foo").on("click", function(event) {
console.log("link clicked");
});
Когда я запускаю rails server
и контролирую консоль Javascript в Chrome, я вижу:
> posts.js loaded
Однако я не вижу
> link clicked
когда я нажимаю ссылку.
Может кто-нибудь объяснить, что происходит?
Используя ответ от @Adil и отзыв от @Monk_Code, я нашел следующее: это лучшее решение, учитывая, что установка Rails 4 по умолчанию включает Turbolinks.
приложение/активы/JavaScripts/posts.js
console.log("posts.js loaded");
var ready;
ready = function() {
$("#foo").on("click", function(event) {
console.log("link clicked");
});
};
$(document).ready(ready);
$(document).on("page:load", ready);
Вы можете проверить две вещи.
Вы успешно добавили jQuery, вы можете найти, как добавить jQuery здесь.
Код привязки выполняется при добавлении foo в DOM, вы можете использовать document.ready для обеспечения этого.
console.log("posts.js loaded");
$(document).ready(function(){
$("#foo").on("click", function(event) {
console.log("link clicked");
});
});
$(document).on('page:load', ready)
если вы используетеturbo-links