Som jag nämnde i min tidigare Ruby on Rails-handledning är Unobtrusive JavaScript (UJS) en av de coolaste nya funktionerna i Rails 3. UJS tillåter Rails-genererad kod att vara mycket renare, hjälper till att skilja din JavaScript-logik från dina HTML-layouter och urkopplar Rails från Prototype JavaScript-biblioteket. I denna handledning kommer vi att titta på dessa funktioner och lära dig hur du använder dem i en enkel Rails 3-applikation.
För att börja, vad exakt är UJS? Enkelt, UJS är JavaScript som är skilt från din HTML-markup. Det enklaste sättet att beskriva UJS är med ett exempel. Ta en onclick event handler; vi kunde lägga till det påträngande:
Länk
Eller vi kan lägga till det på diskret sätt genom att fästa händelsen till länken (med jQuery i det här exemplet):
Länk
Som nämnts i min introduktion har den andra metoden en rad fördelar, inklusive enklare felsökning och renare kod.
"Rails 3, å andra sidan, är JavaScript-ramar agnostic. Med andra ord kan du använda din JavaScript-ramverk, förutsatt att ett Rails UJS-genomförande existerar för den ramen."
Fram till version 3 genererade Ruby on Rails obtrusive JavaScript. Den resulterande koden var inte ren, men ännu värre, den var tätt kopplad till prototypens JavaScript-ramverk. Detta innebar att om du inte skapade ett plugin eller hackade Rails, var du tvungen att använda Prototype-biblioteket med Rails JavaScript-hjälpar metoder.
Rails 3, å andra sidan, är JavaScript-ramar agnostic. Med andra ord kan du använda din JavaScript-ramverk, förutsatt att ett Rails UJS-genomförande existerar för den ramen. De nuvarande UJS-implementeringarna omfattar följande:
Rails 3 implementerar nu alla dess JavaScript Helper-funktionalitet (AJAX skickar, bekräftelseanmälningar etc.) diskret genom att lägga till följande HTML 5 anpassade attribut till HTML-element.
Till exempel, denna länk tagg
Förstöra
skulle skicka en AJAX-bortförfrågan efter att ha frågat användaren "Är du säker?".
Du kan tänka dig hur mycket svårare att läsa som skulle vara om allt det JavaScript var inline.
Nu när vi har granskat UJS och hur Rails implementerar UJS, låt oss skapa ett projekt och titta på några specifika applikationer. Vi använder jQuery-biblioteket och UJS-implementeringen i den här handledningen.
Eftersom vi skapar ett nytt projekt från början, är det första vi behöver göra att skapa projektet genom att skriva följande:
skenar ny blogg - skip-prototyp
Lägg märke till att jag instruerar Rails att hoppa över prototypens JavaScript-fil, eftersom jag ska använda jQuery-biblioteket.
Låt oss starta servern bara för att se till att allt verkar fungera.
Och voila!
Nu när vi har satt upp vårt projekt måste vi lägga till jQuery och jQuery UJS till vårt projekt. Du är fri att organisera din JavaScript men du vill, men Rails konventionen för att strukturera dina JavaScript-filer är som följer (alla dessa filer går i offentliga / javascripts):
Om du inte redan har laddat ner jquery.js (eller hänvisa till en CDN) och rails.js och inkludera dem i din offentliga / javascripts
katalog.
Det sista vi behöver göra för att komma igång är att faktiskt berätta att Rails ska inkludera dessa js-filer på var och en av våra sidor. För att göra detta, öppna application.rb i din config-katalog och lägg till följande rad
config.action_view.JavaScript_expansions [: defaults] =% w (jquery rails application)
Denna konfigurationsobjekt berättar att Rails ska inkludera de tre ovan nämnda JavaScript-filerna.
Alternativt kan du ta tag i jQuery från en CDN (dvs http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js) genom att manuellt inkludera en skriptmärke som pekar på rätt plats. Om du gör det, måste du ta bort "jquery" från konfigurationsobjektet JavaScript_expansions.
För att visa skenorna UJS-funktionalitet måste vi först ha en kod att arbeta med. För den här demo kommer vi bara att ha ett enkelt Post-objekt. Låt oss skapa det nu
skenor generera ställning Postnamn: strängtitel: stränghalt: text
Och sedan låt oss migrera vår databas för att skapa inläggstabellen.
rake db: migrera
Okej, vi är bra att gå! Om vi navigerar till http: // localhost: 3000 / inlägg / new
, vi borde se ett formulär för att skapa en ny inlägg.
Ok, det fungerar allt! Låt oss nu gräva och se hur du använder UJS- och AJAX-funktionaliteten bakad i Rails.
Nu när alla nödvändiga JavaScript-filer ingår, kan vi faktiskt börja använda Rails 3 för att implementera en del AJAX-funktionalitet. Även om du kan skriva alla anpassade JavaScript som du vill, ger Rails några bra inbyggda metoder som du kan använda för att enkelt utföra AJAX-samtal och andra JavaScript-åtgärder.
Låt oss titta på några vanliga railshjälpare och JavaScript som de genererar
Om vi tittar på vår inläggsformulär kan vi se att när vi skapar eller redigerar ett inlägg, skickas formuläret manuellt och vi vidarebefordras till en skrivskyddad vy av den posten. Vad händer om vi ville skicka in formuläret via AJAX istället för att använda en manuell inlämning?
Rails 3 gör det enkelt att konvertera någon form till AJAX. Öppna först din _form.html.erb
dela i app / visningar / inlägg och ändra första raden från:
<%= form_for(@post) do |f| %>
till
<%= form_for(@post, :remote => sant) gör | f | %>
Före Rails 3, lägger du till : remote => true
skulle ha genererat en massa inline-JavaScript i formtaggen, men med Rails 3 UJS är den enda ändringen tillägget av ett HTML 5-anpassat attribut. Kan du upptäcka det?