Rails: button_tag vs normal %button pe HAML (Programare, Ruby Pe Șine, Haml)

Sandip Subedi a intrebat.

Am aflat că există două moduri de a crea butoane în Ruby on Rails. Noi folosim HAML pentru modelele noastre.

Primul mod:

= button_tag 'Submit', type: 'submit', class: 'btn btn-primary primary-button'

Al doilea mod:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

Ambele moduri îl convertesc în HTML.

Ce ar trebui să aleg? Există argumente pro/contra pentru a folosi oricare dintre ele? Este doar o chestiune de preferință?

2 răspunsuri
Ilya Konyukhov

Puteți alege orice mod. Nu există argumente pro și contra. Este ca și cum ai ieși irb consolă: puteți tasta fie exit fie quit, veți ieși oricum. Este doar o chestiune de preferințe.

În ceea ce mă privește, prefer să folosesc a doua modalitate atunci când clasa elementului este statică:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

și primul mod atunci când este calculată dinamic:

= button_tag 'Submit', type: 'submit', class: "btn btn-primary #{extra_class}"

(Bineînțeles, dacă aveți propria metodă ajutătoare button_tag va exista o diferență. Dar nu cred că va fi nevoie să redefiniți helperii încorporați).

Comentarii

  • Vă mulțumesc. Asta are sens. –  > Por Sandip Subedi.
arieljuod

Depinde cu adevărat de ceea ce aveți nevoie. Dacă folosiți ajutorul doar pentru a reda o etichetă HTML de bază a unui buton, atunci ar putea fi chiar mai rapid să folosiți doar o etichetă HTML, fără a fi nevoie de HAML. Cred că se ajunge la contextul în care ceva ar putea avea argumente pro și contra.

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit
<button class="btn btn-primary primary-button" type="subimt">Submit</button>

Va fi mai rapid, deoarece rails nici măcar nu trebuie să transforme codul HAML în HTML.


DAR, ajutorul button_tag va fi folosit în interiorul unui formular care este deja un ajutor form_for/tag/with, înconjurat de alte ajutoare text_field/text_field_tag, text_area/text_area_tag, etc., și are mai mult sens să se folosească doar ajutorul button_tag pentru coerență.

Ați putea pune aceeași întrebare despre %input{type: „text”} față de text_field_tag, dar este mai ușor să te decizi să folosești helperii, deoarece gestionează foarte ușor numele câmpurilor pentru a lucra cu șine din start: poți avea prefixe, sufixe, gestionează array-uri, etc., iar pentru formulare complexe și imbricate poate fi o pacoste. Folosind doar HAML va însemna că va trebui să setați numele manual, așa că veți dori ajutoarele pentru a vă dezvolta formularele mai rapid.

De asemenea, helpers are mai multe opțiuni decât atributele html obișnuite care se joacă bine cu rails-ujs: confirm, disable_with, remote, etc. Puteți, desigur, să replicați aceleași atribute de date create de aceste opțiuni, dar coerența cu alte helper-uri va fi un avantaj dacă le folosiți deja, nu va trebui să vă amintiți dacă opțiunea remote: true este write data: {remote: true} sau orice altceva.

Personal, eu folosesc întotdeauna ajutoarele de formulare de la rails pentru că le voi folosi pentru formulare și intrări, așa că mi se pare firesc să folosesc și ajutoarele submit_tag, button_tag, etc., chiar dacă știu că și acestea sunt destul de ușor de scris cu HAML.

Și pentru ultimul profesionist la care mă pot gândi, ai putea avea propriul helper button_tag. Dacă doriți ca toate butoanele dvs. să fie din clasa „btn btn-primary”, puteți pur și simplu să suprascrieți helperul button_tag și nu va fi nevoie să modificați nicio vizualizare.


Ca un dezavantaj, desigur, aveți viteza, utilizarea helper-ului adaugă un pas în plus cu logică suplimentară. Nu cred că va fi o problemă reală reală, deoarece nu este o logică foarte grea, iar dacă chiar vrei să storci fiecare milisecundă ai putea chiar să scrii doar html pur atunci și nici măcar HAML.

Aveți, de asemenea, contra curbei de învățare. Toată lumea cunoaște HTML, iar trecerea de la HTML la HAML este simplă de cele mai multe ori. Traducerea tag-ului HTML în opțiunile de tag-uri ajutătoare necesită citirea documentației pentru acestea și are unele avertismente (f.button din button_tag? etc.). De asemenea, nu cred că este o problemă foarte mare, totul are o curbă de învățare și cred că avantajele merită.