Som nevnt i min tidligere Ruby on Rails-opplæring, er Unobtrusive JavaScript (UJS) en av de kuleste nye funksjonene i Rails 3. UJS tillater Rails-generert kode å være mye renere, bidrar til å skille JavaScript-logikken fra HTML-oppsettene dine, og uncouples Rails fra Prototype JavaScript-biblioteket. I denne opplæringen skal vi se på disse funksjonene og lære å bruke dem i et enkelt Rails 3-program.
For å starte, hva er UJS? Bare UJS er JavaScript som er skilt fra HTML-oppslaget ditt. Den enkleste måten å beskrive UJS er med et eksempel. Ta en onclick event handler; vi kunne legge til det påtrengende:
link
Eller vi kunne legge det på diskusjon ved å legge hendelsen til lenken (ved hjelp av jQuery i dette eksempelet):
link
Som nevnt i min introduksjon, har denne andre metoden en rekke fordeler, inkludert enklere feilsøking og renere kode.
"Rails 3, derimot, er JavaScript-rammeverk agnostisk. Med andre ord kan du bruke JavaScript-rammeverket ditt, forutsatt at en Rails UJS-implementering eksisterer for det rammene."
Frem til versjon 3 genererte Ruby on Rails påtrengende JavaScript. Den resulterende koden var ikke ren, men enda verre, den var tett koblet til Prototype JavaScript-rammeverket. Dette betydde at med mindre du opprettet et plugin eller hacked Rails, måtte du bruke Prototype-biblioteket med Rails JavaScript-hjelpemetoder.
Rails 3, derimot, er JavaScript-rammeverk agnostisk. Med andre ord kan du bruke JavaScript-rammeverket ditt, forutsatt at en Rails UJS-implementering eksisterer for det rammeverket. De nåværende UJS-implementasjonene omfatter følgende:
Rails 3 implementerer nå all sin JavaScript Helper-funksjonalitet (AJAX sender, bekreftelsesanbefalinger, osv.) Diskret ved å legge til følgende HTML 5 egendefinerte attributter til HTML-elementer.
For eksempel, denne linken taggen
Ødelegge
ville sende en AJAX slett forespørsel etter å ha spurt brukeren "Er du sikker?".
Du kan forestille deg hvor mye vanskeligere å lese det ville være hvis alt det JavaScript var inline.
Nå som vi har vurdert UJS og hvordan Rails implementerer UJS, la oss sette opp et prosjekt og se på enkelte spesifikke applikasjoner. Vi bruker jQuery-biblioteket og UJS-implementeringen i denne opplæringen.
Siden vi oppretter et nytt prosjekt fra begynnelsen, er det første vi må gjøre å opprette prosjektet ved å skrive følgende:
skinner ny blogg - skip-prototype
Legg merke til at jeg instruerer Rails for å hoppe over prototypens JavaScript-fil, siden jeg skal bruke jQuery-biblioteket.
La oss starte serveren bare for å sikre at alt ser ut til å fungere.
Og, voila!
Nå som vi har satt opp prosjektet, må vi legge til jQuery og jQuery UJS til prosjektet vårt. Du er fri til å organisere JavaScript, men du vil, men Rails-konvensjonen for strukturering av JavaScript-filene dine er som følger (alle disse filene går offentlig / javascripts):
Hvis du ikke allerede har lastet ned, må du laste ned jquery.js (eller referere til en CDN) og rails.js og inkludere dem i din offentlige / javascripts
katalog.
Det siste vi må gjøre for å komme i gang, er faktisk å fortelle Rails å inkludere disse js-filene på hver av våre sider. For å gjøre dette åpner du application.rb i konfigurasjonsmappen din og legger til følgende linje
config.action_view.JavaScript_expansions [: defaults] =% w (jquery rails søknad)
Dette konfigurasjonselementet forteller Rails å inkludere de tre JavaScript-filene som er nevnt ovenfor som standard.
Alternativt kan du hente jQuery fra en CDN (dvs. http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js) ved å manuelt inkludere en skriptetikett som peker på riktig sted. Hvis du gjør dette, må du fjerne "jquery" fra konfigurasjonselementet JavaScript_expansions.
For å demonstrere skinnene UJS-funksjonalitet må vi først ha kode for å jobbe med. For denne demoen skal vi bare ha et enkelt Post-objekt. La oss generere det nå
skinner generere stillas Postnavn: strengtittel: strenginnhold: tekst
Og så la oss migrere databasen vår for å lage innleggstabellen.
rake db: migrere
Ok, det er bra å gå! Hvis vi navigerer til http: // localhost: 3000 / innlegg / ny
, Vi bør se et skjema for å opprette et nytt innlegg.
Ok, det fungerer alt! La oss nå grave inn og se hvordan du bruker UJS- og AJAX-funksjonaliteten bakket i Rails.
Nå som alle nødvendige JavaScript-filer er inkludert, kan vi faktisk begynne å bruke Rails 3 for å implementere noen AJAX-funksjonalitet. Selv om du kan skrive alle de egendefinerte JavaScript som du vil ha, gir Rails noen gode innebygde metoder som du kan bruke til å enkelt utføre AJAX-anrop og andre JavaScript-handlinger.
La oss se på et par vanlige hjelpelister og JavaScript de genererer
Hvis vi ser på innleggets skjema, kan vi se at når vi oppretter eller redigerer et innlegg, sendes skjemaet manuelt og deretter blir vi omdirigert til en skrivebeskyttet visning av innlegget. Hva om vi ønsket å sende det skjemaet via AJAX i stedet for å bruke en manuell innsending?
Rails 3 gjør det enkelt å konvertere alle former til AJAX. Først åpner du _form.html.erb
delvis i app / visninger / innlegg, og endre første linje fra:
<%= form_for(@post) do |f| %>
til
<%= form_for(@post, :remote => sant) gjør | f | %>
Før Rails 3, legger du til : remote => true
ville ha generert en haug med inline JavaScript inne i formeltaggen, men med Rails 3 UJS er den eneste endringen tillegg av et HTML 5-tilpasset attributt. Kan du få øye på det?