2010-09-18 18 views
16

Piuttosto cheIl pulsante può generare il tag <button> anziché <input type = "submit" />?

<input type="submit" /> 

voglio uscita

<button> 

utilizzando il metodo button_to (rotaie 3.0.0)

è possibile?

+0

'button' non è specifico in HTML5, né "input" per i pulsanti deprecati in HTML5. –

+0

In realtà, '

+0

Scusa per la confusione, è più una mia preferenza usare i pulsanti a causa della flessibilità del contenuto e della facilità di stile. Mi piace definire tutti i tag predefiniti, quindi è utile mantenere i pulsanti al di fuori degli input. – Graham

risposta

4

È possibile sostituire l'helper button_to in ApplicationHelper per il rendering di un tag button. Guarda il codice che button_to ha già e modificalo per soddisfare i tuoi scopi.

+0

Perché questa risposta è stata respinta? Sembra un suggerimento ragionevole per me? C'è un problema con l'override di button_to? –

+6

@SteveSmith Probabilmente manca l'esempio. – Noz

+0

Inoltre, gli helper che ignorano, più in generale conosciuti come patch per le scimmie, non sono a prova di futuro. Dal momento che questo è un codice di visualizzazione in cui nulla dipende da esso, forse ti importa meno? – Woahdae

0

io in genere solo attaccare questo nel mio file application_helper.rb:

def button_tag(text, options={}) 
    content_tag(:button, {:type => "submit"}.merge(options)) { text } 
    end 

È quindi possibile chiamare da una visione in questo modo:

button_tag "Save", :class => 'accept' 
+0

Immagino che questo sia stato downvoted perché è ora in Rails: http://api.rubyonrails.org/v3.2.13/classes/ActionView/Helpers/FormTagHelper.html#method-i-button_tag – nruth

1

da quello che posso vedere Rails ha già un helper per generare tag; si chiama button_tag (anziché button_to).

così, si potrebbe utilizzare il seguente nel vostro punto di vista, non vedo la necessità di sovrascrivere button_to:

<%= button_tag "Button Text", :class => "btn", :type => "submit" %> 

nessuna necessità di sovrascrivere. inoltre, si consiglia di fornire sempre il parametro: type poiché è visualizzato in modo diverso nei vari browser.

+2

Questo non è ciò che 'button_to' fa . –

+0

@ClemensHelm puoi spiegare di più il tuo downvote? Non ho nemmeno menzionato cosa dovrebbe fare Button_to nella mia risposta. Puoi farmi sapere come la risposta è sbagliata o come può essere migliorata? – FireDragon

+0

Penso che ciò che @Clemens Helm sta cercando di dire è che 'button_to' genera un modulo. Il poster originale vuole generare un modulo con un 'button' di tipo submit invece di un tag' input'. – Mohamad

10

A partire dall'ultima versione di Rails (4.0.2, non sono sicuro delle versioni precedenti) il passaggio di un blocco a button_to richiama la logica di ramo nell'helper che crea un elemento pulsante anziché un input.

Ad esempio, se si voleva fare un 'delete' elemento pulsante Haml, bootstrap & fontawesome (il mio caso d'uso):

= button_to(foo_path(@foo), 
    class: 'btn btn-sm', method: :delete, remote: true) do 
    <i class="fa fa-times"></i> 

Se si desidera che siano solo sempre elementi dei pulsanti non importa quale , puoi sempre avere il contenuto del tuo pulsante all'interno di un blocco invece del primo argomento. Non sono sicuro di quale sia il trade-off.

3

Ho appena scoperto che cambiando button_to all'utilizzo di un blocco genera tag pulsante, invece di ingresso:

così:

<%= button_to account_path(@account), data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-default btn-danger' do %> 
    Inactivate 
<% end %> 

Genera:

<form method="post" class="button_to" action="/accounts/30"> 
    <div> 
    <input type="hidden" value="delete" name="_method"> 
     <button type="submit" data-confirm="Are you sure?" class="btn btn-default btn-danger"> 
      Inactivate 
     </button> 
    <input type="hidden" value="" name="authenticity_token"> 
    </div> 
</form> 
+0

Sono troppo pigro per sovrascrivere il metodo button_to, quindi questo ha funzionato per me :) – JustMichael

Problemi correlati