|
레일스에는 기본적으로 Prototype과 Script.aculo.us라고 하는 걸출한 자바스크립트 라이브러리가 내장되어 있다. 이들 라이브러리와 함께 레일스에서 제공하는 여러가지 자바스크립트 헬퍼를 사용하면 Ajax를 비롯한 멋드러진 "최첨단" 웹 애플리케이션의 작성이 "누워서 떡먹기"로 쉬워진다. 예를 들어, link_to를 remote_link_to로만 변경하면 통상적인 HTTP호출이 갑자기 "자동마술적으로" Ajax 호출로 둔갑하는 것 같은 것은 시작에 불과하다.
그럼에도 내가 레일스와 함께 사용할 자바스크립트 라이브러리로 jQuery 를 선택한 데에는 몇 가지 이유가 있었던 것 같다.
물론 레일스에서 jQuery를 마치 Prototype 다루듯 사용할 수 있게 해 주는 jRails 같은 플러그인도 존재한다. 또한 Prototype 기반에서도 얼마든지 unobtrusive하게 자바스크립트를 사용할 수도 있다. (LowPro나 UJS 레일스 플러그인 같은 것을 사용하면 된다). 그렇지만 그럴 바에야 레일스 관례를 따르는게 낫지 않을까. Prototype을 쓸건가 아니면 jQuery나 Mootools 같은 다른 라이브러리를 사용할 거냐는 물론 다분히 선택의 문제이며 개인적인 취향의 문제인 경우가 많다. 그렇지만 적어도 레일스 개발자라면, 레일스가 가져다 주는 편안함과 관례에 너무 익숙해 버린 자기 자신을 뒤돌아 보는 의미에서라도, 한번 쯤은 "익숙한 것과의 결별"을 시도해 봄직도 하다. 참고로 내 레일스 애플리케이션에서 jQuery로 Progressive Enhancement를 해 나가는 과정을 간략히 소개한다. 1. 통상적인 방식으로 HTML 코드를 작성한다. (물론 레일스니까, 레일스 폼 헬퍼를 사용하며, 또한 리소스 접근은 REST 방식을 따른다) 뷰는 다음과 같다. 전체 뷰가 아닌, 컨셉만 보인 것이다. <%= link_to "덧글(#{post.comments.size})", comments_path(post), :class => 'comments_link' %> 2. 제대로 잘 작동하는지 확인했다면, 이제 jQuery로 Progressive Enhancement한다. 우선 새로운 댓글을 추가하는 부분을 만들자. jQuery의 Form 플러그인을 사용한다. $('.comment_form').ajaxForm({ 작동하는 걸 확인했으면, 이번에는 댓글을 삭제하는 부분을 작성해 보자. 동적으로 이벤트를 바인드하기 위해 jQuery LiveQuery 플러그인을 사용한다. $('.delete_comment_link').livequery('click', function(){ 컨트롤러는 통상적인 REST 컨트롤러와 다를 바 없다. 다만, ajax호출인지 아닌지를 파악하여 각각에 따라 다르게 렌더링하는 부분만 더하면 된다. # by thinkr | 2008/02/08 14:24 | 트랙백(1)
|
카테고리
최근 등록된 덧글
예외처리를 한 큐에 배울 ..
by ikspres at 08/07 일방적으로 책을 디립다.. by 고감자 at 08/06 아하 ! by jinto at 07/31 잘 봤습니다 ^^ by xeraph at 07/16 100% 동감합니다. 앞으.. by ikspres at 07/05 책 잘 읽고 있습니다. .. by 인간흉기 at 06/28 본문 가장 아래 문단에 오.. by Tirin at 06/17 책 배달되어서 잘 받았.. by 짱가 at 06/16 Partial Update 기능은 .. by kkoon at 06/13 책이 배달되어서 잘 받아.. by 낭만고양이 at 06/13 최근 등록된 트랙백
세랍의 생각
by xeraph's me2DAY Unobtrusive는 뭐라 .. by 인사이트 테라의 느낌 by terra's me2DAY 열정 충전소 - 6회 루비.. by 오 픈 마 루 스 튜 디 오 [Rails] 레일스 2.1 .. by 쎄미 테라의 생각 by terra's me2DAY 멀티랭귀지 프로그래밍 by Minthe Blog 화니의 느낌 by lethee's me2DAY 꽃띠앙의 생각 by codian's me2DAY 종텐++의 느낌 by jong11's me2DAY 이글루 링크
이전 블로그
| |||
<%= render :partial => 'posts/comment', :collection => post.comments %>
<% form_for :comment, comments_path(entry), :html => { :class => 'comment_form' } do |form| %>
<%= form.text_area :body, :rows => 2 %>
<%= submit_tag '저장' %>
<% end %>