Ruby Templating With Slim Partea a 2-a

În cea de-a doua și ultima parte a acestei serii mini, vom termina această introducere cu secțiuni despre afișarea codului Ruby, interpolare, text simplu și cum să personalizați Slim la nevoile dvs. După acest articol, ar trebui să fii pregătit pentru o acțiune subțire. 

Codul de ieșire

Ați văzut deja un pic despre cum să utilizați Ruby în șabloanele dvs. Această secțiune vă oferă tot ce aveți nevoie pentru a utiliza acest lucru. În primul articol, am folosit deja Ruby în șabloanele noastre. Permiteți-mi să vă reamintesc ce vreau să spun:

Subţire

html head title = stilesheet_link_tag "cerere", media: 'toate', 'data-turbolinks-track' => true = javascript_include_tag 'cerere', 'data-turbolinks-track' => true = csrf_meta_tags

După cum puteți vedea, în interiorul acestei etichete de cap, am folosit deja câteva metode de la Rails pentru a trata stilurile și chestiile JavaScript - nimic major. Tot ceea ce trebuie să faceți pentru a executa codul Ruby este să îl prefixați cu un egal = semn. Dacă codul dvs. trebuie să se răspândească pe mai multe linii, trebuie doar să adăugați o coloană inversă \ la sfârșitul fiecărei linii și continuați să mergeți pe următoarea. Ar trebui să închideți linia într-o virgulă ,, atunci nu aveți nevoie de backslash. O minunată atingere dacă mă întrebi.

Să aruncăm o privire la un alt exemplu mai concret. Formularele de scriere sunt adesea o durere - o mulțime de cod de boilerplate, o mulțime de repetări și toate acestea se temeau <%= %> semne în ERB. Acest lucru poate deveni dezordonat în cel mai scurt timp. Ar putea fi mai frumos, huh?

ERB

<%= form_for @agent do |f| %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :number %> <%= f.text_field :number %> <%= f.label :licence_to_kill %> <%= f.check_box :licence_to_kill %> <%= f.label :gambler %> <%= f.check_box :gambler %> <%= f.label :womanizer %> <%= f.check_box :womanizer %> <%= f.submit %> <% end %>

O mulțime de lucruri pentru a scrie pentru a crea un nou @agent obiect, nu? Slim vă permite să vă ocupați de acest lucru mult mai succint. Păstrăm semnul egal și scapăm de cele mai multe alte lucruri. Tadaa!

Subţire

= form_for @agent do | f | = f.label: nume = f.text_field: nume = f.label: număr = f.text_field: număr = f.label: license_to_kill = f.check_box: license_to_kill = f.label: gambler = f.check_box: gambler = f .label: womanizer = f.check_box: femeie = f.submit

Puteți vedea clar de ce acest proiect se numește Slim. Atât excesul de grăsime a dispărut. Nu-mi spune că nu-ți place ce vezi - știu că o săpești! Doar un = semnați și puteți să vă populați marcajul cu codul Ruby - în acest caz de la Rails, desigur. Și când o comparați cu HTML-ul redat pe pagina finală, este greu să ignorați cât de compact este Slim. 

Executarea HTML

Amintiți-vă de întrebarea inițială că echipa de bază Slim este ghidată de: "Care este minimul necesar pentru a face acest lucru?" Când te uiți la rezultatul final HTML, cred că este corect să spun că Slim a răspuns la întrebarea asta cu succes - fără plângeri la sfârșitul meu. Vreau să arunc câteva exemple mai mici pentru a vă oferi mai multe ocazii să vă obișnuiți cu modul în care acest lucru arată în Slim.

Acest fragment ERB ...

<%= render "shared/agents", collection: @agents %>

... devine acest lucru în Slim:

= render "shared / agents", colecție: @agents

ERB

agenţi

    <% @agents.each do |agent| %>
  • Nume: <%= agent.name %>
    Număr: <%= agent.number %>
    Licență pentru a ucide: <%= agent.licence_to_kill %>
  • <% end %>

Subţire

h2 Agenți ul - @ agents.each do | agent li.agent div | Nume: = agent.name div | Număr: = agent.number div | Licență pentru a ucide: = agent.licence_to_kill

Ați putea scrie acest lucru într-un mod mult mai raționalizat prin interpolare. Dar nu vrei să fii prea nebun cu asta. Ar arata astfel:

Subţire

h2 Agenți ul - @ agents.each do | agent li.agent div Nume: # agent.name div Număr: # agent.number div Licență pentru a ucide: # agent.licence_to_kill

Interpolarea textului

Am menționat acest lucru în cele din urmă, dar, deoarece este o formă de ieșire a codului Ruby, aparține și acestei secțiuni. Puteți folosi, de asemenea, interpolarea standard a textului de la Ruby în șabloanele Slim, de asemenea. 

Subţire

 h2 Bun venit domnul # misix_agent.surname! Mă aștept să mori! h2 Bun venit domnul \ # misix_agent.surname! Mă aștept să mori!

HTML

Bun venit domnului Bond! Mă aștept să mori!

Bine ați venit domnul \ # misix_agent.surname! Mă aștept să mori!

Așa cum am văzut mai sus, o simplă întoarcere de frână \ scapă de interpolare.

Codul de control

Încă unul pentru drum. Să presupunem că doriți să utilizați câteva condiții în opinia dvs. Similar cu Haml, semnificați codul Ruby care nu ar trebui să fie afișat pe pagină printr-o linie simplă -. Ați văzut acest lucru în exemplul de mai sus, unde am folosit acest lucru pentru a repeta @agents fără a afișa respectiva parte a codului. 

Deși ar trebui să încercați să stați departe de tot felul de condiționări în viziunea dvs., acolo unde este posibil și să încercați să găsiți soluții OOP mai bune pentru astfel de cazuri - care este o poveste pentru un alt moment - ar arăta astfel:

Subţire

- dacă actual_user.role == "admin" p # admintxt | Bine ai revenit stăpânului meu! = link_to "Editați profilul", edit_user_path (: current) = link_to "Logout", logout_path - elsif current_user = link_to "Editați profilul", edit_user_path (: current) = link_to "Logout" = link_to "Login", calea de conectare

ERB

<% if current_user.role == "admin" %> 

Bine ai revenit stăpânului meu!

<%= link_to "Edit Profile", edit_user_path(:current) %> <%= link_to "Logout", logout_path %> <% elsif current_user %> <%= link_to "Edit Profile", edit_user_path(:current) %> <%= link_to "Logout", logout_path %> <% else %> <%= link_to "Register", new_user_path %> <%= link_to "Login", login_path %> <% end %>

Dacă doriți să ieșiți codul fără ca HTML să scape în loc, utilizați doar două semne egale ==. Asta e!

Înainte de a continua, ar trebui să-mi dau timpul să menționez acest lucru: După cum știți, tonul de cod de vizualizare a codurilor Ruby în contextul nostru este un miros serios și trebuie minimizat în orice moment. Doar pentru că Slim o face chiar mai îndrăzneață să împletească șabloanele cu tonuri de logică, nu înseamnă că ar trebui. Practica constrângere în acest departament! Făcut drept, pe de altă parte, Slim face cu adevărat elegant pentru a injecta Ruby acolo unde este nevoie.

HTML inline

Dacă simțiți nevoia de a scrie HTML în șabloanele dvs. Slim, aveți opțiunea să. Nu am folosit această caracteristică și nici nu mi-ar plăcea să o folosesc, dar poate că în timpul unei faze de tranziție acest lucru ar putea fi util pentru noii veniți. Hai să vedem super rapid.

Subţire

doctype html  title = full_title (randament (: title)) = stilesheet_link_tag "aplicație", media: 'all',' data-turbolinks-track '=> true = javascript_include_tag' csrf_meta_tags  header.navbar .logo = link_to "exemple de aplicații", "root_path", id: "logo"  .principal = randament  

Când Slim întâlnește brațul unghiular stâng <, știe că vrei să amesteci în unele HTML. 

Text verbatim (Word for Word)

Caracterul conductei | semnalează lui Slim că vrei să ai un cuvânt simplu pentru cuvânt și să copiezi linia. De fapt, aceasta vă permite să evitați orice fel de procesare. Documentația spune că dacă doriți să scrieți cuvinte verbale pe mai multe linii, trebuie să indentați textul cu fiecare ruptură de linie.

Subţire

corp p | Slim este cel mai bun prieten al meu. Slim este cel mai bun prieten al meu.

Executarea HTML

 

Slim este cel mai bun prieten al meu. Slim este cel mai bun prieten al meu.

screenshot

Dacă introduceți textul pe aceeași linie ca și caracterul de țeavă, puteți seta marginea din stânga după țeavă plus un singur spațiu. Din curiozitate, m-am păcălit cu asta puțin și am găsit următoarele rezultate. Doar varianta ultimului exemplu are un sentiment de sughiț puțin evident pe care ar trebui să-l cunoașteți - înghite primul cuvânt al propoziției. 

Subţire

corp p | Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Și așa mai departe ... p | Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Și așa mai departe ... p Această linie este pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Și așa mai departe ... p Această linie este pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Și așa mai departe ... p Această linie este pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe… 

screenshot

Modul în care ieșirea este redată în marcajul dvs. HTML diferă puțin.

 

Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe…

Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe…

Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe…

Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe…

linia este pe marginea din stânga.line va avea un spațiu în fața acestuia.line va avea două spații în fața acestuia.curând…

Comentarii

Desigur, este necesar să vă comentați din când în când codul. Nu uitați, totuși, că prea multe comentarii sunt un miros, de asemenea. Doar încercați să o păstrați la un minim absolut!

O slash în față / este tot ce aveți nevoie pentru a comenta orice cod.

Subţire

corp / p | Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe… 

Boom! Și acum acest paragraf a dispărut de pe pagină. Acest comentariu nu lasă urme în marcajul HTML final. Trebuie doar să o aplicați selectorului părinte și toți copiii săi vor fi comentați și ei. Deci, chiar și comentariile sunt subțiri și minime.

Dacă, pe de altă parte, vreți un comentariu HTML care apare în rezultatul final redat, trebuie doar să adăugați un semn de exclamare ! după slash.

Subţire

corp /! p | Această linie se află pe marginea din stânga. Această linie va avea un spațiu în fața acesteia. Această linie va avea două spații în fața acesteia. Si asa mai departe… 

Executarea HTML

 

ordinat!

Setări rapide personalizate

Am folosit comenzi rapide de-a lungul timpului. Când introduceți un punct . sau un simbol hash # îi spui lui Slim că vrei să folosești comenzi rapide predefinite pentru clase și ID-uri. Este cu siguranță un set foarte bun, dar ce puteți face pentru a vă extinde și pentru a crea propriile dvs. fragmente mici de fragmente? Putem face acest lucru atât pentru etichete, cât și pentru atribute. Bine ați venit la minunata lui Slim!

În Rails, trebuie doar să configurați un inițializator cu următorul model:

config / initializatori / slim.rb

Slim :: Comanda rapidă pentru motor.set_options: 'c' => tag: 'container', '#' => attr: 'id', ' => atr: 'class'

În aplicațiile Sinatra, pur și simplu adăugați aceeași configurație oriunde sub linia în care vă aflați cere "slim".

your_sinatra_app.rb

cereți 'sinatra' necesită 'slim' Slim :: Motor.set_options comanda rapidă: 'c' => tag: 'container', '#' => attr: => attr: 'class' a obține ('/') slim: index __END__ @@ indexul doctype html html titlu Titluri Slim Șabloane corp h1 Șabloane șabloane nivel cu Slim

Puteți seta opțiunile pe motorul Slim :: Engine, oferind un hash cu comanda rapidă de care aveți nevoie. În exemplul de mai sus, l-am instruit pe Slim să o folosească c ca o scurtătură pentru o recipient etichetă. Ați folosi acest lucru în fișierele dvs. Slim:

Subţire

c.content Acum aveți o etichetă container cu o clasă .content.

Și HTML-ul redat ar arăta astfel, bineînțeles:

HTML

 Acum aveți o etichetă de container cu o clasă .content. 

Destul de frumos, nu? Dar nu credeai că acolo se oprește muzica, nu-i așa? Putem să o luăm mai departe. Permiteți-mi să vă dau un exemplu care este mai puțin implicat:

config / initializatori / slim.rb

Slim :: Comanda rapidă motor.set_options: '#' => attr: 'id', '.' => atr: 'class', 'c' => tag: 'container' 'role', '^' => attr:% w (rol de date)

În acest exemplu, am creat nu numai etichete personalizate, ci și atribute personalizate la îndemână. Să discutăm acest pas cu pas. Apropo, am rupt opțiunile de hash pe mai multe rânduri, pentru a le putea citi și pentru a evita o linie lungă de cod pe care nimeni nu le place să se poticnească. Citește mult mai frumos, nu crezi?

Prin simbolul ampersand &, acum putem crea o etichetă de intrare și trebuie doar să o hrănim cu un tip - care urmează imediat după ampersand. Putem folosi orice simbol care are sens să folosească; nu este nevoie să folosiți aceeași pe care am făcut-o. Fiți atenți, totuși, și încercați să luați decizii fără compromis în acel departament.

Subţire

& text nume = "utilizator" & parola nume = "pw" & trimite

Executarea HTML

  

Când faceți modificări la acest inițializator cu ajutorul comenzilor rapide personalizate, nu trebuie să uitați să reporniți serverul local. Fără aceasta, modificările dvs. nu vor fi reflectate în timpul procesării prealabile.

Apoi, dacă am nevoie de a rol atribut, acum îl pot prefixa cu un @ simbol. 

Subţire

.persoană @ admin Daniel Mendler 

Executarea HTML

Daniel Mendler

Modificări: Atributul rol este o abordare semantică pentru a descrie rolul elementului în cauză - dacă trebuie să determinați scopul elementului.

Vedeți, prin intermediul punctului ajungem class = "persoană" clasa și @admin ne-a dat rol = "admin". Dandy destul de la îndemână, dar putem face acest mic pas înainte și vom folosi un matrice pentru a specifica mai multe atribute care ar trebui să fie create printr-o singură comandă rapidă.

Subţire

.nifty ^ hacker CrackDoctor

Executarea HTML

CrackDoctor

Pentru că am asociat o serie de atribute pentru noi ^ comenzi rapide, Slim creează date-rol și rol atribute simultan printr-un singur simbol. Asta poate fi destul de la îndemână. Imaginați-vă dacă doriți să ieșiți un element similar cu cele de mai jos și o puteți face concis cu o comandă rapidă și cu un cod Ruby.

HTML

Scriind toate aceste lucruri de mână nu pare să fie cea mai bună utilizare a timpului dvs. - avem cod pentru a face acel loc de muncă pentru noi. Ei bine, acolo aveți, este tot ce trebuie să știți pentru a vă crea propriul set de comenzi rapide minunate - sau pentru a crea o mizerie mare atunci când nu practicați un pic de constrângere. Mi-ar recomanda să nu treceți peste bord cu acest lucru - în special încercați să stați departe de a defini scurtaturi care utilizează simboluri pe care Slim este deja atașat la. 

Reîmprospătare: atributele de date sunt folosite pentru a avea unele date private pe pagina sau pe aplicația dvs. Lucruri care vă ajută să filtrați conținutul, de exemplu. Acestea sunt atribute personalizate care pot fi folosite pe toate elementele HTML. Utilizarea acestora în scopuri JavaScript este o altă practică obișnuită. Este, de asemenea, foarte util pentru testarea elementelor pe o pagină dacă doriți să vă asigurați că anumite elemente apar în sus și doriți să evitați ca designerii să fie încurcați cu stilurile dvs..

Configurarea subțirelor

Înainte de a pleca, am vrut să vă arăt o scurtă privire în opțiunile vaste de configurare și cum le aplicați. Pentru Rails, ați crea un fișier de mediu cum ar fi config / medii / development.rb și specificați opțiunile de care aveți nevoie. Pur și simplu plasați configurația pe un loc înăuntru Rails.application.configure bloc. 

Rails.application.configure do Slim :: Engine.set_options default_tag: 'p', tabsize: 2, attr_list_delims: '(' => ')', '[' => ']' ',' '' => '' ',' <'=>'> ' Sfârșit

În această configurație, am asigurat că eticheta implicită care este creată dacă o etichetă este omisă este a

tag-not a div tag, care este setarea standard. De asemenea, am ajustat tab-ul pentru a utiliza două spații albe și în cele din urmă a adăugat încă două delimitatoare pentru ambalarea atributelor tagurilor. Acum pot folosi <> și "" precum și pentru asta. Nu este deloc util, dar bun pentru demonstrații. 

În exemplul de mai jos, puteți vedea că toate delimitatoarele pentru ambalajele de atribute creează aceeași ieșire - și asta .unele clasă sau # Unele id- creează

etichete per implicit.

Subţire

corpul #zeroth a href = "http://slim-lang.com" title = "Pagina de pornire" Găsiți pagina de pornire .first a [href = "http://slim-lang.com" title = " pagina "] Accesați pagina de pornire a doua secțiune (href =" http://slim-lang.com "title =" Pagina principală ") Accesați pagina de pornire .third a  Du-te la pagina de pornire .fourth a" href = "http://slim-lang.com" title = "Prima pagină" "

Executarea HTML

  Du-te la pagina de start Mergeți la pagina de start Mergeți la pagina de pornire Mergeți la pagina de pornire Mergeți la pagina de pornire 

Alternativ, puteți să setați și aceste chestii config / initializatori / slim.rb așa cum v-am arătat în secțiunea despre comenzile rapide personalizate. 

Pentru Sinatra, este vorba despre aceleasi exercitii precum cele discutate in sectiunea shortcuts. Doar setați opțiunile undeva sub dvs. cere "slim" declarație și sunteți bine să mergeți. 

Consultați documentația din "Opțiuni disponibile" pentru a citi mai multe despre ceea ce este disponibil pentru configurare. Slim vă oferă multe opțiuni de joc.

Gândurile finale

Asta este în esență. Există unul sau două subiecte mai avansate pe care ar trebui să le faceți în cazul în care este necesar, dar m-am gândit că ele nu sunt în mare parte prietenoase pentru începători și nici nu sunt utilizate intens în fiecare zi. Am vrut să păstrez lucrurile simple și să vă arăt tot ce aveți nevoie pentru a trece rapid la acest minunat, minunat motor templating. Distrează-te și sper că Slim este acum una dintre cele mai preferate jucării tale!

Cod