2009-05-07 57 views
5

Làm cách nào để đính kèm sự kiện onclick vào link_to_function sao cho việc nhấp vào sự kiện làm mới một phần tử trên trang (sử dụng partials)?Đính kèm sự kiện onClick vào link_to_function của Rails

Khi người dùng nhấp vào liên kết đã tạo, tôi muốn làm mới phần chứa mã để i được cập nhật.

def add_step_link(form_builder) 
    logger.info 'ADD_STEP_LINK' 
    link_to_function 'add a step' do |page| 
     form_builder.fields_for :steps, Step.new, :child_index => 'NEW_RECORD' do |f| 
     logger.info 'inserted js' 
     html = render(:partial => 'step', :locals => { :step_form => f, :i=>@i+=1}) 
     page << "$('steps').insert({ bottom: '#{escape_javascript(html)}'.replace(/NEW_RECORD/g, new Date().getTime()) });" 
     end 
    end 
    end 

Tôi có một phần trong một hình thức lớn hơn mà chỉ chứa:

<%= add_step_link(technique_form) %> 

Tôi đang cố gắng theo dõi số lượng các bước trong một kỹ thuật. Trong biểu mẫu tôi đang tạo, người dùng có thể thêm các bước mới vào một bộ hướng dẫn. Ngay bây giờ, tôi có các trường mặc định cho các bước 1-7. Thêm một bước, giúp bạn bước 8. Vấn đề là các bước tiếp theo cũng được đánh số '8'.

Tôi đang mở rộng hướng dẫn "Nhiều mô hình con ở dạng động" trong http://railsforum.com/viewtopic.php?id=28447 cho mục đích của riêng tôi.

Trả lời

5

Ok, tôi hơi bối rối bởi những gì bạn đang làm, nhưng tôi sẽ cố gắng và đưa ra một số gợi ý.

Thay vì sử dụng link_to_function, sử dụng link_to_remote. Liên kết với các hàm gọi javascript, nhưng những gì bạn muốn làm là gọi lại cho bộ điều khiển, sau đó chạy một số rj để thay thế toàn bộ phần hoặc nhiều khả năng, thêm phần mới (chứa bước) vào cuối dòng hiện tại của bạn các bước.

này tương tự như tất cả những ví dụ bạn sẽ đã thấy nơi mọi người thêm một bình luận đến hết bình luận blog của họ (hy vọng sử dụng link_to_remote hơn remote_form_for) thấy 3/4 đường đi qua http://media.rubyonrails.org/video/rails_blog_2.mov

Bạn có thể xem tài liệu cho link_to_remote tại đây: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html

+0

Tôi chắc chắn link_to_remote là những gì bạn cần. Bạn thực hiện cuộc gọi từ xa đến máy chủ, trả lại HTML (hoặc Javascript) mà bạn có thể đưa vào trang. –

0

Tôi khuyên bạn nên sử dụng link_to_remote như RichH đề xuất. Bí quyết cho bạn dường như là theo dõi @i. Tôi có thể đặt nó làm thông số URL trong link_to_remote hoặc trong đối tượng phiên. Tôi muốn đề xuất phiên - có vẻ dễ dàng hơn.

Các vấn đề liên quan