2012-07-11 4 views
0

Ruby on Rails에서 이상한 버그가 발생했습니다. 플래시 객체를 사용하여 여러 업로드를 처리하기 위해 Uploadify JQuery 라이브러리를 구현하려고합니다. Ajax로로드 된 탭에서이 기능을 구현하고있다. 이전에는 Uploadify의 영향을받은 HTML과 동일한 Ajax 페이지에서 내 Uploadify js 파일에 대한 javascript_include_tag가있었습니다. 그러나, 이것은 매우 이상한 결과를 만들어 냈습니다. 때로는 해당 페이지에서 내 Uploadify 함수 호출이 작동하고 다른 경우에는 완전히 실패합니다. 이 경우 탭 사이를 전환하여 작동하지 않았고 Ajax 페이지를 두 번째 또는 세 번째로 검색하면 일반적으로 문제가 해결되었습니다. 기발하게도 Firebug로 HTML을 검사하면 Javascript 기능이 작동하더라도 JavaScript 링크가 보이지 않아 파일에 대한 네트워크 요청을 볼 수 있습니다. 내 응용 프로그램 레이아웃에서 head 태그로 업로드하기 위해 javascript_include_tag를 이동하려고 시도했지만 Uploadify 플랫 아웃이 완전히 작동을 멈췄습니다.레일 3은 모든 자바 스크립트를 헤드 태그에 저장해야합니까?

Ajax 페이지의 링크 태그를 사용하여 업로드 기능을 프로덕션 서버로 푸시했는데 문제가 여전히 발생했지만 훨씬 덜 빈번합니다. 사실 나는 그것을 단지 몇 번 알아 차렸다. 또한이 기능은 다른 브라우저 기간 인 Firefox에서만 작동하지만, 완전히 다른 문제 일 수도 있습니다 (자바 스크립트가 브라우저 독립적이어야 함에도 불구하고 ...).

여기 내 머리 태그 내가 거기에 uploadify 호출을 포함하려고 할 때 어떻게 생겼는지입니다 :

%head 
    %title Virtual Robot Games 
    = stylesheet_link_tag 'style.css','web_app_theme.css', 'events.css', :media => 'screen'  
    = csrf_meta_tag   
    = javascript_include_tag 'jquery' 
    = javascript_include_tag 'prototype' 
    = javascript_include_tag 'noconflict.js' 
    = javascript_include_tag 'effects.js' 
    = javascript_include_tag 'calendar_date_select' 
    = javascript_include_tag 'highlight' 
    = javascript_include_tag 'textcounter' 
    = javascript_include_tag 'scriptaculous.js' 
    = javascript_include_tag 'collapsible.js' 
    = javascript_include_tag 'bbhelp.js' 
    = javascript_include_tag 'swfobject' 
    = javascript_include_tag 'application' 
    = javascript_include_tag 'uploadify' 

추가 정보 :

내가 프로토 타입 및 JQuery와 그들이있어 모두를 사용하고 있습니다 끊임없이 서로 충돌하지만, 저는 보통이 문제를 해결할 수 있습니다. 필자는 두 라이브러리가 상충되는 장면을 보지 못했으며 때때로 JQuery 만 사용하기도했습니다. 일반적으로 갈등이 있다면 평평하게 나올 것입니다.

편집 사실 나는 내가 jquery-rails 보석을 사용하고, 나는이 문제를 알아 냈다고 생각하고 내 Uploadify의 js 파일에 jQuery 라이브러리를 포함하는 것을 잊었다. 대신 나는 googleapi에 대한 인라인 링크가있었습니다. Google API 링크를 포함하는 것으로 교체하면 문제가 해결됩니다. 내 원래의 질문이지만, 내 JavaScript 링크가 모두 내 머리 태그에 저장되어야합니까?

+0

이 문제에 대한 임시 사례를 준비하려고합니다. – Noz

답변

1

"내 원래 질문이 맞지만 JavaScript 링크가 모두 내 머리 태그에 저장되어 있어야합니까?"

javascript_include_tag은 HTML 마크 업에서 <script></script> 요소를 생성하는 도우미 일뿐입니다. 예를 들어 </body> 끝나 페이지의 어느 곳에서나 추가 할 수 있습니다. 또한 부분적으로 사용할 수도 있습니다. 다른 일반적인 방법은 content_for을 템플릿/부분 집합에 사용하고 레이아웃에서 관련 레이블을 <head> 섹션에 사용하는 것입니다. 그 목적은 사이트의 한 부분 만이 매우 자바 스크립트 집중적 인 경우 (차트/그래픽/보고서 등), 다른 사이트 모듈이 js 라이브러리를 전혀 사용하지 않을 때 (그러나 모든 모듈이 공유 할 때) 관련된 js를로드하는 것입니다. 공통 레이아웃).

그래서 요약하면 javascript_include_tag의 위치는 HTML 페이지의 JavaScript 실행 규칙에 따라 다릅니다. <script></script> 요소로 사용하십시오.

+0

내가하는 일이 무엇인지는 알겠지만, 이는 스코어/퍼포먼스와 관련된 문제를 피하기 위해 연습 관련 질문에 더 가깝습니다.그래서 내가이 권한을 가지고 있다면 자바 스크립트 라이브러리를 어디에로드해야하며 관련성이 있는지/사용 했습니까? – Noz

+0

네, 맞습니다. 내가 명백한 것을 말하면 미안해. –