JQuery는 Rails 4 애플리케이션에서 페이지 새로 고침시에만로드됩니다.


78

Rails 4 애플리케이션을 만들고 이미지 팝업 효과를 위해 fancybox 라이브러리를 추가했습니다. 잘 작동하지만 페이지를 새로 고칠 때만 작동합니다. 사용자가 페이지를 새로 고치지 않으면 jquery가 전혀 작동하지 않습니다. 작은 jquery 메서드로 테스트 해 보았지만 모두 페이지 새로 고침 후에 만 ​​작동합니다. 트위터 부트 스트랩도 사용하고 있습니다.

내 assets / 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 2013

2
나는 잘 Turbolinks 등으로 jQuery를 사용하고있을 너무 일반적입니다 ...이 더 가시 / 토론 주제 아닙니다 놀랄거야
돈 치들에게

답변:


180

알겠습니다. 답변을 제공 할만큼 귀하의 문제를 이해 한 것 같습니다. 터보 링크 사용에 대한 것은 터보 링크가 브라우저가 페이지를 다시로드하는 것을 방지하기 때문에 문서 준비 이벤트에 바인딩하는 대부분의 플러그인과 라이브러리가 작동을 멈춘다는 것입니다. 이러한 문제를 해결하는 트릭이 있지만 가장 쉬운 해결 방법은 jquery.turbolinks 를 사용하는 것입니다 .

그것을 사용하려면 다음을 추가하십시오 Gemfile.

gem 'jquery-turbolinks'

그리고 이것은 당신의 assets/javascripts/application.js파일에 :

//= require jquery.turbolinks

그리고 당신은 잘 가야합니다.

참고 : 터보 링크를 사용할 필요 는 없지만 유용하며 전체 페이지 새로 고침을 피하여 요청을 더 빠르게 만듭니다. Turbolinks는 AJAX를 통해 클릭 한 링크의 콘텐츠를 가져와 동일한 페이지에 렌더링하므로 자산 (JS 및 CSS)을 다시로드하는 오버 헤드를 제거합니다. 페이지가 함께 작동하도록하십시오. 이전 단락의 라이브러리를 사용하면 실제 문제가 없었습니다. 페이지에 CSS와 JS가 많을수록 터보 링크를 사용하여 더 큰 향상을 얻을 수 있습니다.


나는이 정확한 문제를 가지고 있었고 당신은 그것을 해결했습니다. 고마워요 Ian. 나는 jquery가 link_to 리디렉션 후 페이지로드에서만 이벤트 리스너를 페이지에 바인딩하지 않는다고 생각했습니다.
Alex Neigher 2013 년

4
좋아는 참고로 근무하지만 중요한 //= require jquery.turbolinks요구로 //= require jquery 작업에 대한 github.com/kossnocorp/jquery.turbolinks
돈 치들에게

감사합니다, 그래서 나를 위해 일했다,하지만 당신을 추가해야이 (초보자 용) 서버를 다시 시작해야
GhostRider

제거하십시오 / = require jquery =)
jfgrissom

큰. 이 정보에 감사드립니다. 그것은 나에게 많은 도움이됩니다.
Nimish 2011 년

17

Ian은 좋은 대답을했고, 이것은 그것에 대한 일종의 부가 기능입니다 (그래서 글을 쓰는 시점에서 실제로 누구에게도 댓글을 달 수는 없습니다.)

에서 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
추가 정보를 원하면 답변을 읽을 때까지 내 링크가 작동하지 않았습니다.
pob21 2014

8

CodeWalrus와 Ian의 답변을 모두 따를 때까지 일을 할 수 없었지만 저에게는 더 많은 것이있었습니다. jquery.turbolinks Readme 에 설명 된 대로 순서는 매우 구체적이어야합니다.

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

또한 여기설명 된대로 속도 최적화를 위해 애플리케이션 자바 스크립트 링크를 바닥 글에 넣은 경우 <head>태그의 콘텐츠보다 먼저로드되도록 태그 로 이동해야합니다 <body>.


이것은 나를 위해 일했습니다. 포함 된 javascrip 파일을 헤드로 옮기는 것이 필수적인 것 같습니다.
Aboozar 라 자비

5

여기에서 Turbolinks가 문제입니다 .Turbolinks는 웹 페이지의 성능을 향상시키기 위해 레일에 추가되었습니다.

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

자세한 내용은 여기를 참조 하십시오.


1

다음 코드 줄을 제거하십시오.

//= require turbolinks

그런 다음 이것을 추가하십시오.

//= require jquery.turbolinks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.