2010-01-24 175 views
5

我在jQuery中編寫了一個很好的編輯器,我想將它添加爲表單輔助方法。添加表單輔助方法

我將如何去做一個新的窗體幫助方法?

理想ID希望能夠呼籲:

f.nice_editor :field 
+0

你能提供一些更具體的細節嗎?你想在「form_for @foo do | f |」中做「f.nice_editor:foo」之類的東西嗎?塊? – Eli 2010-01-24 18:24:31

+0

是的,那就是即將發生的事情。 – Arcath 2010-01-24 18:25:52

回答

6

產生到form_for的對象是ActionView::Helpers::FormBuilder的實例。所以你所要做的就是在那裏添加實例方法。

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

一些研究,我發現,這個工程後:

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

「的conf」本來一切從傳遞給它的符號選項視圖。它適用於f。

9

問題的一部分是:你在哪裏把nice_editor代碼?我不認爲在你的安裝中直接編輯ActionView :: Helpers :: FormBuilder是個好主意。相反,把你的代碼放在app/helpers中的一個文件中。有幾種方法可以將擴展方法添加到FormBuilder。

舉例來說,假設你有一個輔助文件items_helper.rb:

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 

而且,看到這個good discussion,它展示瞭如何使用self.included()來擴展FormBuilder。