2008-10-21 6 views
17

Gibt es eine einfache Möglichkeit, die Formular-Helfer den Tabindex-Parameter automatisch zu setzen, wenn Sie Formularhilfen in Rails verwenden?Automatische Methode zum Setzen des Tabindex mit Hilfe von Formularen

Grundsätzlich möchte ich nicht den Registerkartenindex für jedes Formularelement beim Erstellen von Formularen manuell festlegen müssen (ich vergesse, sie zu aktualisieren, wenn ich Dinge ändere). Die Mehrzahl der Formulare, die ich schreibe, sind im Grunde eine Liste von Feldern. Der Tab-Index sollte in der Reihenfolge sein, in der sie definiert sind. Idealerweise würde ich den Anfangsindex im form_for Anruf setzen und alles andere würde für mich gehandhabt werden.

Weiß jemand, wie man das macht?

Antwort

31

I ApplicationHelper

def autotab 
    @current_tab ||= 0 
    @current_tab += 1 
end 

Dann in meine Ansichten, die ein Verfahren wie dieses in der Regel füge ich mit einem :tabindex => autotab Anrufe an die Helfer machen etwa so:

<%= text_field "post", "login",:tabindex => autotab, :value => @login %> 

Sie können alle text_field auch ändern , check_box, Methoden einzeln nacheinander, um den Tabindex automatisch hinzuzufügen, indem Sie so etwas zu Ihrem Anwendungshelfer hinzufügen: (ungetestet, aber Sie erhalten den Punkt)

def text_field_with_tabindex(*args) 
    options = args.last 
    options[:tabindex] = autotab if options.is_a?(Hash) && options[:tabindex].nil? 

    text_field_without_tabindex(*args) 
end 

def self.included(base) 
    base.class_eval do 
    alias_method_chain :text_field, :tabindex 
    end 
end 

, dass mehr Probleme sein könnte, als es

+0

wert habe ich lokale Variable statt Instanzvariable verwenden, werden Sie mir bitte erklären, warum seine nicht funktioniert, wenn ich CURRENT_TAB statt @current_tab nehmen – railslearner