JQuery завантажується лише під час оновлення сторінки в програмі Rails 4


78

Я створив додаток Rails 4 і додав бібліотеку fancybox для ефекту спливаючого зображення. Це працює нормально, але лише тоді, коли сторінка оновлюється. Якщо сторінку не оновлює користувач, тоді jquery взагалі не працює. Я спробував протестувати його також за допомогою невеликих методів jquery, але всі вони працюють лише після оновлення сторінки. Я також використовую завантажувальний твіттер.

Файл "Мої активи / application.js":

//= require jquery
//= require jquery_ujs
//= require fancybox
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .


$(document).ready(function() {
  $(".fancybox").fancybox();
    $("#hand").click(function(){
     if($("#check6").is(':visible'))
     {
      $("#check6").hide();
      }
     else
     {
      $("#check6").show();
      }
    });
});

7
Чи працює це при завантаженні першої сторінки, і коли ви натискаєте інше посилання, це не робить? Я думаю, у вас виникла проблема з бібліотекою турболінків. Видаліть цей рядок зі свого assets/javascript/application.jsфайлу (рядок 5, //= require turbolinks) і дайте мені знати :)
Ян

Гей, трюк твій спрацював, js завантажується нормально. Але як щодо мене турболінки, чи не знадобляться вони мені згодом?
vishB

2
Я здивований, що це не більш видима / обговорювана тема ... Настільки часто використовується jQuery, а також Turbolinks
Don Cheadle

Відповіді:


180

Гаразд, я думаю, я розумію вашу проблему настільки, щоб дати відповідь. Річ у використанні турболінків полягає в тому, що більшість плагінів та бібліотек, які прив’язуються до події готовності до документа, перестають працювати, оскільки турболінки заважають браузеру перезавантажувати сторінку. Існують хитрощі, щоб виправити ці проблеми, але найпростіший спосіб вирішити це - використовувати jquery.turbolinks .

Щоб використовувати його, просто додайте це до свого Gemfile:

gem 'jquery-turbolinks'

і це до вашого assets/javascripts/application.jsфайлу:

//= require jquery.turbolinks

і вам повинно бути добре їхати.

FYI : Вам насправді не потрібно використовувати турболінки, але це корисно і робить запити швидшими, уникаючи повного оновлення сторінки. Turbolinks отримує вміст посилання, яке ви натиснули за допомогою AJAX, і відображає його на тій самій сторінці, тим самим виключаючи накладні витрати на перезавантаження ресурсів (JS та CSS). Спробуйте змусити вашу сторінку працювати з нею. Використовуючи бібліотеку в попередньому параграфі, я не мав реальних проблем. Чим більше CSS та JS на вашій сторінці, тим більші покращення ви отримуєте, використовуючи турболінки.


У мене була саме така проблема, і ти прибив її, дякую, Ян. Я вважав, що jquery не прив’язував мої слухачі подій до сторінки після перенаправлення link_to та лише при завантаженні сторінки.
Alex Neigher

4
Гаразд, це спрацювало, але важливо зазначити, що //= require jquery.turbolinksпотрібно працювати після того, //= require jquery як він запрацює github.com/kossnocorp/jquery.turbolinks
Дон Чідл

Мені це
вдалось,

Обов’язково видаліть / = вимагайте jquery =)
jfgrissom

чудово. Дякую за цю інформацію. Мені це дуже допомагає.
Німіш

17

Ян мав гарну відповідь, і ця є своєрідним доповненням до цього (ТАК не дозволяє мені фактично коментувати когось на момент написання).

З https://github.com/rails/turbolinks/#jqueryturbolinks :

Add the gem [gem 'jquery-turbolinks'] to your project, then add the following line to your JavaScript manifest file, after jquery.js but before turbolinks.js:

//= require jquery.turbolinks

Раніше я не додав require jquery.turbolinksпотрібне місце у списку, тож це було трохи прискіпливо. Потім я додав це по-новому, і, сподіваюся, це працює краще.


2
+1 для додаткової інформації, мої посилання все ще не працювали, поки я не прочитав вашу відповідь.
pob21,

8

Я не міг змусити щось працювати, поки не дотримувався відповідей CodeWalrus та Яна, але для мене це було ще щось. Як описано в jquery.turbolinks Readme , порядок повинен бути дуже конкретним.

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//
// ... your other scripts here ...
//
//= require turbolinks

Крім того, як описано тут , якщо ви розмістили посилання javascript програми у нижньому колонтитулі з міркувань оптимізації швидкості, як це було у мене раніше, вам потрібно буде перемістити його в <head>тег, щоб він завантажувався до вмісту в <body>тезі.


Це спрацювало для мене. Здається, дуже важливо перемістити включені файли javascrip в голову.
Aboozar Rajabi

5

Проблемою тут є турболінки. Турболінки додаються в рейки для поліпшення роботи веб-сторінки. Це рішення працює

<%= link_to "Create New Form", sampleform_path, 'data-no-turbolink' => true %>

Для більш детальної інформації зверніться до цього


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.