2013-09-17 3 views
0

У меня есть файл js в каталоге моих ресурсов/javascripts /. Этот файл подхватил рельсы правильно (я могу видеть его в поджигатель, когда я проверяю страницу head тега)Rails: вызов функции Javascript в конце страницы

И я звоню функцию от этого Js файла в моем application.js следующим образом:

// 
//= require jquery 
//= require jquery_ujs 
//= require bootstrap 
//= require_tree . 

$(window).load(function(){ 
    Boxlayout.init(); 
}); 

Я читал на SO где-то, что init() функции должны вызываться с .load функции так, что они называются после загрузки DOM.

Но здесь javascript не работает.

Наоборот, когда я явно включить файл JS с:

<%= javascript_include_tag "file.js" %> 

в нижней части страницы и называют ту же функцию init из application.js Javascript работает отлично.

Я не хочу явно включать файл. (хотите сделать это по рельсам). Итак, как мне это сделать с помощью первого метода?

EDIT

Использование Rails 3.2.14 (Нет Turbolinks).

Также Javascript не работает на Heroku, хотя он отлично работает на месте.

+0

Покажите свой application.js файл, пожалуйста –

+0

@ lol007 обновил вопрос – mrudult

+0

Как и в сторону, [ '.load (...)'] (http://api.jquery.com/load-event /) устарел в jQuery 1.8; вы должны использовать [.on ("load", ...) '] (http: // api.jquery.com/on/). –

ответ

1

Попробуйте изменить

$(window).load(function(){ 

в

$(document).ready(function(){ 
+2

Обратите внимание, что это означает что-то другое. 'load' будет ждать, пока все изображения и CSS закончат загрузку, тогда как' ready' будет запущен, как только будет загружен HTML, и DOM будет загружен в память. –

+0

Это все еще не работает, когда я удаляю '<% = include_tag%>' для файла js – mrudult

+0

@ RoryO'Kane Я хочу использовать функцию '.load'. хотите исключить js после того, как загружен css. – mrudult

0

У вас есть // = require_tree. в application.js. Попробуйте создать новый файл * .js в каталоге assets/javascripts/и добавьте там свой код.

+0

И что? Я знаю это. – mrudult

0

Я думаю, что это проблема с turbolinks.

Turbolinks заменяет тело страницы через AJAX, когда вы нажимаете ссылку, но оставляете голову неповрежденной. Поскольку CSS и JavaScript загружаются и анализируются только в начале сеанса просмотра, вы получаете значительное повышение скорости.

Недостатком является то, что события загрузки jQuery не будут инициированы. Это объясняет, почему ваш скрипт выполняется, когда вы вставляете его в тело страницы, но не тогда, когда он правильно помещен в голову.

Попробуйте включить jQuery turbolinks gem. Это вызовет ожидаемые события jQuery при включении турболинка.

https://github.com/kossnocorp/jquery.turbolinks

+0

Я не использую Turbolinks. – mrudult

Смежные вопросы