2010-08-24 6 views
1

현재 사이트 리팩토링 중입니다. 우리는 하나의 js 라이브러리 (jquery)를 사용하기로 결정했습니다. 문제는 시간 제약 때문에, 우리는 지금 그렇게 많이 할 수밖에 없다. 우리는 그것들을 공존시켜야한다.레일에 content_for를 추가합니다.

우리가 JQuery와 충돌 방법은 없습니다이 때문에 쉽게, 그래서 난 그냥 JQuery와 그 충돌의 일을하지 않고 다음과 같이 프로토 타입을 추가 선언 할 수

<%= javascript_include_tag "jquery" %> 

<%= yield :jquery %> 

<%= javascript_include_tag "prototype", "effects", "dragdrop", "controls", "lowpro", "neo", "filter", "slider", "calendar", "application", 'alerts' %> 

그때 단지 content_for 전화 (: JQuery와) 필요할 때마다 특정 jquery js 파일을 추가해야합니다. 그래서 문제 없습니다.

다른 jquery 파일에 2 개의 부분을 포함 할 때 문제가 발생합니다. content_for jquery가 이미 호출되었으므로 그 중 하나만 호출됩니다. 더 이상 호출되지 않습니다. 그래서 a.rhtml에서 a.js를 추가하고 b.rhtml에서 b.js를 추가하고 a.js 만 추가하면됩니다. 포함될 것입니다)

하나의 솔루션은 하나의 마스터 js 파일에 모든 것을 포함시키는 것이지만 모든 기능이 있기 때문에 유지하기가 어려울 것입니다. 이미있을 때 content_for에 추가 할 수있는 방법이 있습니까? 불려 왔습니까? 이 content_for 보인다

http://apidock.com/rails/v2.3.8/ActionView/Helpers/CaptureHelper/content_for

실제로 추가 :

난 그냥 API를 확인. 하지만 내 일은 단지 추가/삭제하지 않는다는 것입니다. 두 번째 content_for 통화를 완전히 무시합니다.

답변

1

Jammit을 확인하십시오. assets.yml에 다양한 파일 세트를 정의한 다음 Jammit이 파일을 패키지화하고 배포 용으로 압축 및 압축 된 버전의 파일을 생성합니다. 사용하기가 매우 쉽고 여러 파일에 기능을 유지 한 다음 Jammit이 패키지로 묶을 수 있습니다. 이렇게하면 HTTP 연결 오버 헤드가 줄어들고 단일 마스터 파일이 쉽게 캐싱되어 사용자 환경이 좋지 않으므로 클라이언트 렌더링 속도가 향상됩니다.

+0

흠, 우리는 이미 bundle-fu를 가지고 있습니다. (현재는 작동하지 않습니다.) 문제는 프로토 타입을 호출하기 전에 jquery 파일을 포함해야한다는 것입니다. 따라서 $ 변수를 반환 할 수 있습니다. 따라서 yield – corroded

+0

또한'var $ j = jQuery.noConflict()'를 사용할 수 있고 jquery에'$ j'를 사용할 수 있습니다. 그리고 prototype은'$'로 작업을 계속합니다. 그렇게하면 나란히 사용할 수 있습니다. – nathanvda

+0

요점은 Jammit의 자산을 사용하는 경우 모든 Javascript 자산을 고정 된 순서로 패키지화하고 이에 대해 걱정하지 않을 수 있다는 것입니다. :) –