在我的應用程序中,任何時候有一個表單,我都會調用兩個輔助方法來將一些javascript注入到網頁的頭部。一種方法注入代碼以專注於表單的第一個輸入,第二種方法掛接了一些與client_side_validation gem一起使用的回調函數。Rails自動調用應用程序幫助器方法隨時調用form_for
我將在視圖中具有form_for的任何頁面上調用這兩種方法。有沒有辦法在調用form_for的任何時候自動調用這些方法,而不是將調用添加到我的模板文件中?
使用Rails 3.1。
在我的應用程序中,任何時候有一個表單,我都會調用兩個輔助方法來將一些javascript注入到網頁的頭部。一種方法注入代碼以專注於表單的第一個輸入,第二種方法掛接了一些與client_side_validation gem一起使用的回調函數。Rails自動調用應用程序幫助器方法隨時調用form_for
我將在視圖中具有form_for的任何頁面上調用這兩種方法。有沒有辦法在調用form_for的任何時候自動調用這些方法,而不是將調用添加到我的模板文件中?
使用Rails 3.1。
你應該用你自己的方法來包裝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如果你不想形式使用你的助手。
這可以去負載路徑中的某個位置。或者您可以要求持有此代碼的文件。
您不應該爲這些使用Rails輔助方法。你應該使用jQuery。添加到你的application.js文件中:
$(document).ready(function() {
$('form>input:first-child').focus();
}
這是一個例子,對於你所說的回調使用類似的方法。
我通過調用幫助器中的content_for來使用jQuery。我使用輔助方法的原因是因爲我不想在每個網頁上使用這些腳本。這並不是說它在任何時候都是一個性能殺手,但我想明白爲什麼要將它包含在每個頁面上,如果它不會在大多數頁面上使用的話。欣賞表單上的提示>輸入:儘管第一個孩子。 – retailevolved
這看起來像它會完美的工作。我沒有看到form_for_without_my_helpers的定義 - 我錯過了什麼嗎?我可以簡單地做alias_method_chain:form_for:my_helpers嗎?另外,你會在哪裏推薦這個代碼?這種事情是否有約定? – retailevolved
沒關係 - docs將其清除,alias_method_chain負責定義和鏈接所需的所有內容。謝謝! – retailevolved