2011-10-09 54 views
1

在我的應用程序中,任何時候有一個表單,我都會調用兩個輔助方法來將一些javascript注入到網頁的頭部。一種方法注入代碼以專注於表單的第一個輸入,第二種方法掛接了一些與client_side_validation gem一起使用的回調函數。Rails自動調用應用程序幫助器方法隨時調用form_for

我將在視圖中具有form_for的任何頁面上調用這兩種方法。有沒有辦法在調用form_for的任何時候自動調用這些方法,而不是將調用添加到我的模板文件中?

使用Rails 3.1。

回答

0

你應該用你自己的方法來包裝form_for來調用你的助手。幸運的是,Rails以alias_method_chain的形式提供了一種簡單的方法。

module ActionView::Helpers::FormHelper 
    def form_for_with_my_helpers (*args) 
    my_helpers 
    form_for_without_my_helpers (*args) 
    end 
    alias_method_chain :form_for :my_helpers 
end 

您現在可以調用與普通的form_for參數form_for_without_my_helpers如果你不想形式使用你的助手。

這可以去負載路徑中的某個位置。或者您可以要求持有此代碼的文件。

+0

這看起來像它會完美的工作。我沒有看到form_for_without_my_helpers的定義 - 我錯過了什麼嗎?我可以簡單地做alias_method_chain:form_for:my_helpers嗎?另外,你會在哪裏推薦這個代碼?這種事情是否有約定? – retailevolved

+0

沒關係 - docs將其清除,alias_method_chain負責定義和鏈接所需的所有內容。謝謝! – retailevolved

0

您不應該爲這些使用Rails輔助方法。你應該使用jQuery。添加到你的application.js文件中:

$(document).ready(function() { 
    $('form>input:first-child').focus(); 
} 

這是一個例子,對於你所說的回調使用類似的方法。

+0

我通過調用幫助器中的content_for來使用jQuery。我使用輔助方法的原因是因爲我不想在每個網頁上使用這些腳本。這並不是說它在任何時候都是一個性能殺手,但我想明白爲什麼要將它包含在每個頁面上,如果它不會在大多數頁面上使用的話。欣賞表單上的提示>輸入:儘管第一個孩子。 – retailevolved

相關問題