2010-04-11 4 views
0

내 의도는 자바 스크립트에서 기능을 독립적으로 유지하여 정상적으로 분해되도록하는 것입니다. 어쩌면 내가 잘못된 길을 원하지만 주요 아이디어는 어디 가서 시도하고있다 :레일즈에서 부분적으로 및 자바 스크립트 파일을 동시에 렌더링하는 방법은 무엇입니까?

  • 이 일부 jQuery를 UI 탭은 사용자가 링크를 누르면, 새 탭은 해당 작업에 해당하는 추가
$("#tabs").tabs('add', "/groups", "My Groups"); 
  • 제어기는 AJAX 요청을 식별하고, 그 탭
,174에만 부분적 렌더링 나는 /groups/index 작업과 관련된 자바 스크립트 파일을하려는이 시점에서
  • 는 그룹 폴더에 index.js.erb 파일을 의미뿐만 아니라, 실행한다.
  • "단 하나의 렌더링"규칙 때문에 나는 그것을 할 수있는 좋은 방법을 생각할 수 없었고 빠른 해결책이 필요합니다.

의견을 보내 주셔서 감사합니다.

답변

0

JS를 동적으로로드하면 가장 자주 피해야하는 모든 종류의 복잡성을 도입 할 수 있습니다. 페이지로드시 한 번에 모든 JS를 한 번에로드하는 것이 더 나은 방법이라고 생각합니다. 이렇게하면 캐싱 및 성능을 향상시키는 단일 스크립트 요청을 처리 할 수 ​​있습니다.

탭을 생성하면 적절한 코드 처리가 트리거 될 수 있습니다. 이를 리스너를 사용하여 이벤트 모델에 래핑하기 시작할 수 있습니다 (코드가 추가 할 올바른 유형의 탭을 수신하도록). 또는로드 할 Ajax 요청이 성공적으로 완료되면 함수를 호출 할 수 있습니다.

+0

감사합니다 ... 잘 정리해도 확실한 해결책입니다. 그러나이 시점에서 각 컨트롤러의 각 동작에 대해 js 파일을 분리했으며 그 방법을 유지할 수 있기를 바랬습니다. – master2004

+0

나는 이것을 또한 수행하여 훌륭한 asset_packager를 사용하여 포장한다. 개발을 위해 템플릿에 개별적으로 포함시킬 수 있습니다. –

1

createedit 개의보기가 부분적으로 동일한 양식을 표시하는 것과 같은 방식으로 수행 할 수 있습니다.

_tab.html.erb
<div class="tab" id="<%= tab.id %>"> 
    <p>whatever</p> 
</div> 
show.js.erb
$('#tabs.').... 
$('something').append("<%= escape_javascript(render('tab', :tab => TabObject)"); 

그리고 당신은 jQuery의 script 데이터 유형 페이지를 요청하는 경우, 당신이 정말로 대응해야 show.html.erb

<%= render 'tab', :tab => TabObject %> 
왜냐하면 레일은 html 뷰를 그 자리에 렌더링하기 때문에 jQuery는 html을 포함하지 않아야하는 <script> 태그 안에 넣을 것입니다.

관련 문제