2011-12-06 6 views
2

페이지가로드 된 후 (AJAX로) 호출 할 수있는 일반 컨트롤러를 만들고 해당 컨트롤러를 호출 한 페이지에 따라 다른 내용을 업데이트하려고합니다.coffeescript 내부에 coffeescript 부분을 렌더링 할 수 없음

사용자의 사용자 지정 요소를 표시하는 동안 더 나은 페이지 및 조각 캐싱을 허용하는 것이 목적입니다.

내 프레임 워크는 다음과 같습니다

controllers/general_ajax_controller.rb 
views/general_ajax/on_page_load.js.coffee 
       ./_update_some_stuff.js.coffee 

컨트롤러의 on_page_load 조치는로드 파셜과 뷰가 파셜을 렌더링 할 파악의 논리를 처리합니다.

<%= render "update_some_stuff" %> 

부분을 렌더링해야 다음 on_page_load.js.coffee 감안

이 코드 (단순화 된)을 갖는다. 나는 커피 스크립트가 (커피이며, 컴파일 된 JS를 지원하지 않는) 나는 on_page_load 뷰의 확장자를 변경하는 경우

을보기에서 포함하기 전에 컴파일하고 있다고 생각

ActionView::Template::Error (SyntaxError: Reserved word "function" on line 2): 
    app/views/general_ajax/on_page_load.js.coffee:1:in `_app_views_general_ajax_on_page_load_js_coffee___2304196970850216490_70321203283120' 

대신 나는이 오류 .js.erb 다음 작동합니다. (이상하게도 작동하기 전에 서버를 다시 시작해야합니다. 이유는 무엇입니까?)

이것은 coffeescript의 문제라고 생각합니까? 그렇지 않으므로 지원되지 않습니다.

측면 토론으로 동적 스크립트에 대한 내 접근 방식에 대해 어떻게 생각합니까?

답변

2

이 해석되어 자바 스크립트로 변환 되었기 때문입니다. on_page_load.js.coffee에 삽입하면 바닐라 자바 ​​스크립트 코드가 Coffee-Script 파일 (이 경우 function 키워드) 내에서 호환되지 않으므로 오류가 발생합니다.

+0

예, 이것이 문제의 원인입니다. 그러나'render "대신에'update_some_stuff"를 권하고 싶습니다. coffeeScript 부분을 올바르게 사용하는 방법? – Cristian

+0

잘 모르겠습니다. 나는 아직 이것을 필요로하지 않았다. respond_to를 사용하여 자바 스크립트를 렌더링했습니다. 어쩌면 거기에서 당신은 단지 하나의 파일 또는 다른 조건을 기반으로 렌더링 할 수 있고 레일 부분을 사용합니다. –

+0

제 아이디어는 각각의 파일을 분리하여 각 파일마다 고유 한 기능이 있고 필요할 때마다 (일부 게으른로드) 개별적으로로드 할 수 있다는 것입니다. 때로는 한 번에 더 많은 파일을로드해야하므로 렌더 호출이 여기에서 작동하지 않습니다. – Cristian

5

하나의 해결책은 원시 파싱 된 자바 스크립트를 뷰에 포함시키는 것입니다.

진드기 (coffeescript는 원시 자바 스크립트라고 말함) 및 raw()를 사용하여 렌더링 된 부분의 HTML 이스케이프를 취소합니다.

` 
<%= raw(render("update_some_stuff")) %> 
` 
+0

감사합니다. 그것은 매우 섹시하지 않지만 작동하지 않습니다 :) –