2010-01-24 39 views
5

Ive đã tạo một trình soạn thảo đẹp trong jQuery và tôi muốn thêm nó làm phương thức trợ giúp biểu mẫu.Thêm phương thức trợ giúp biểu mẫu

Tôi sẽ làm cách nào để tạo phương thức trợ giúp biểu mẫu mới?

lý tưởng id thích để có thể gọi:

f.nice_editor :field 
+0

Bạn có thể cung cấp thêm một số chi tiết cụ thể không? Bạn có muốn có thể làm một cái gì đó như "f.nice_editor: foo" trong một "form_for @foo do | f |" khối? – Eli

+0

Vâng, đó là những gì đang diễn ra. – Arcath

Trả lời

6

Đối tượng được mang đến form_for là một phiên bản ActionView::Helpers::FormBuilder. Vì vậy, tất cả những gì bạn phải làm là thêm các phương thức instance vào đó.

class ActionView::Helpers::FormBuilder 
    def custom_field(...) 
    ... 
    end 
end 
1

sau khi một số nghiên cứu tôi thấy rằng công trình này:

class ActionView::Helpers::FormBuilder 
    def nice_editor(conf) 
     #stuff to draw the editor 
    end 
end 

"conf" sẽ có tất cả các tùy chọn biểu tượng truyền cho nó từ lượt xem. nó hoạt động tốt với f.

9

Một phần câu hỏi là: bạn đặt mã nice_editor ở đâu? Tôi không nghĩ rằng đó là một ý tưởng tốt để chỉnh sửa trực tiếp lớp ActionView :: Helpers :: FormBuilder trong quá trình cài đặt của bạn. Thay vào đó, hãy đặt mã của bạn vào một trong các tệp trong ứng dụng/người trợ giúp. Có một số cách để thêm các phương thức mở rộng vào FormBuilder.

Ví dụ, giả sử bạn có một tập tin items_helper.rb helper:

module ItemsHelper 
    # this is one way to define new instance methods 
    ActionView::Helpers::FormBuilder.class_eval do 
     def nice_editor(conf,*opts) 
      ... 
     end 
    end 
end 

Ngoài ra, xem good discussion này, trong đó cho thấy làm thế nào để sử dụng self.included() để mở rộng FormBuilder.

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