jQuery Mobile er et relativt nytt mobilnettverk, med sin første utgivelse laget i oktober 2010. Rammen har mange interessante funksjoner for å støtte utvikling av webbaserte mobile applikasjoner. I denne opplæringen vil vi fokusere på noen grunnleggende elementer i jQuery Mobile: sidestruktur, skjemaer og Ajax form innsending. Opplæringen er basert på versjon 1.0 alfa-utgivelse 2 i jQuery Mobile-rammeverket.
Som en del av opplæringen vil vi skrive en liten B2C-applikasjon. Et pakkeforsendelsesfirma har et skjema på deres nettside for at kundene kan legge inn informasjon om pakker som er tapt eller skadet under forsendelsen. Ved hjelp av en håndholdt enhet (for eksempel en nettaktivert telefon) legger en kunde inn opplysninger i skjemaet om deres krav: forsendelsesnummeret fra det originale kvitteringen, navn / adresse og beskrivelse av tap / skade. Når kunden sender skjemaet, svarer nettsiden med et krav ID for videre sporing. Scenariet er vist i diagrammet nedenfor:
jQuery Mobile Framework støtter en rekke nettlesere, inkludert iOS-enheter, Android-enheter, Blackberry OS 6 og webOS (for en støttematrix, se http://jquerymobile.com/gbs/). Søknaden i denne opplæringen har blitt testet mot en Android 2.2-enhet og en iOS 4.1-enhet.
Før vi går inn i tekniske detaljer, la oss snakke om hovedhensyn som kjører utformingen av applikasjonen.
Selvfølgelig vil en typisk virkelighetsapplikasjon ha flere eller forskjellige designproblemer. I forbindelse med denne opplæringen vil vårt omfang begrenses til overveielsene ovenfor.
Mesteparten av diskusjonen i denne delen er lånt fra dokumentasjonen på http://jquerymobile.com. Se den opprinnelige referansen for ytterligere detaljer.
jQuery Mobile er et brukergrensesnitt som er bygd på det populære JavaScript-rammeverket jQuery. Den består av brukergrensesnittelementer og programmeringskonstruksjoner som gir konsekvent funksjonalitet over et stort utvalg av mobile og stasjonære nettlesere. Prinsippene "Progressive Enhancement" og "Graceful Degradation" er bak designen. Kjernefunksjonaliteten til rammen støtter et bredt sett med plattformer, mens nyere plattformer drar nytte av flere forbedrede funksjoner.
jQuery Mobile har et relativt lite fotavtrykk. Siden grunnleggende konfigurering av en jQuery Mobile-side utføres bare ved å markere, er det mulig å oppnå raske utviklingssykluser, spesielt hvis søknaden din ikke trenger komplekse programmeringsfunksjoner. Selv om det er bygget på jQuery-kjernen, er temasystemet til jQuery Mobile basert på et nytt CSS-rammeverk som tar sikte på å skille farge og tekstur fra strukturelle stiler som definerer ting som polstring og dimensjoner. En API for hendelsesbehandling håndterer berørings-, mus- og markørfokusbaserte brukerinngangsmetoder på en enhetlig måte.
jQuery Mobile kommer ut av boksen med mange brukergrensesnittelementer, for eksempel topptekst og bunntekst verktøylinjer, knapper med ikoner, formelementer (inkludert berøringsfølsomme skyveknapper og byttebrytere) og lister. Grunnleggende HTML-stiler, to eller tre kolonne grid, og sammenleggbare elementer er også gitt.
Fra jQuery Mobile 1.0-alfa 2-utgivelsen må følgende stilark og JavaScript-biblioteker være inkludert i HTML-sidene dine. Du kan referere dem som nedenfor eller betjene dem fra din egen server:
La oss introdusere grunnstrukturen til en side i jQuery Mobile. En side i jQuery Mobile rammeverk kan være en enkelt side eller en lokal intern koblet 'side' på en side. En "container" -side vil inneholde ett eller flere "innholds-sider". Grensen til en containerside er definert som følger:
...
Vær oppmerksom på at verdien av data-rolle
attributtet er side
. På den annen side er grensen til en innholdsside definert som følger:
...
Vær oppmerksom på at verdien av data-rolle
attributtet er innhold
.
En innholdsside kan ha en tilknyttet overskrift og bunntekst. Som et eksempel kan en containerside med flere innholdssider ha følgende struktur:
.....................
Når en containerside er lastet, vil alle innholdssider i den bli synlige. I vår søknad må vi bare vise bare ett innhold om gangen. Derfor må vi programmere kontrollere hvilket innhold som skal vises, avhengig av kontekst.
For å skjule et element, bruk jQuery Mobile API gjemme seg()
funksjon:
$ ( '# HdrMain') skjule (.);
vil gjemme overskriften med id
hdrMain
. Her brukte vi jQuery ID selectoren ved å passere id
av elementet vi ønsker å velge på forhånd av #
skilt. Omvendt, den vise fram()
funksjonen viser et skjult element:
$ ( '# HdrMain') viser (.);
De Vår demo-applikasjon består av en enkelt html-side, Innholdsoverganger vises i diagrammet nedenfor: Ytterligere observasjoner på koden oversikt over: Vårt fordringsskjema består av følgende felt: For eksempel, la oss se på tekstfeltet for Leveringsnummer: Vi brukte en Som vi vil se senere, vil denne spesielle navngivningskonvensjonen hjelpe oss med å oppdage manglende felt under skjemainnlevering. Et annet bemerkelsesverdig formelement er Skjema siden som vises i en Android 2.2-telefon er vist nedenfor. Brukeren vil bla gjennom siden for å få tilgang til elementene i skjemaet: Det samme skjemaet vises i en iPod touch som kjører iOS 4.1: Vi vil referere til ulike elementer på HTML-siden gjennom hele koden vår. Det er fornuftig å definere disse referansene bare én gang og gjenbruk dem etter behov. Av denne grunn erklærer vi globalt brukte variabler samt konstanter i Oppdrag av disse variablene er gjort i jQuery La oss nå se på innholdseleksjonsfunksjonene som blir kalt av hendelseshåndterere. For å gjemme og vise hovedinnholdet og overskriften / bunnteksten bruker vi For å gjemme og vise overgangsinnhold bruker vi For å gjemme og vise dialogboksen innhold, bruker vi Til slutt, for å gjemme og vise bekreftelsesinnholdet og dets overskrift / bunntekst, bruker vi Når siden er lastet, skal bare hovedinnholdet vises. Av denne grunn er andre innholdssider skjult: Vi vil diskutere hvordan du knytter sammen innholdsvalgfunksjonene med hendelsesbehandlerne nedenfor. Når en bruker trykker på innleveringsknappen, må vi validere skjemadataene før du sender inn skjemaet. For å holde ting enkelt, vil vi bare sjekke om alle de obligatoriske feltene er gitt. Hvis form validering er vellykket, viser vi overgangsinnholdet som består av et spinnerbilde med en kort tekst som informerer brukeren om at skjemaet blir sendt inn. Hvis validering mislykkes, viser vi dialoginnholdet som består av en advarsel og en OK-knapp for å lukke dialogboksen. Etiketter av formelementene med manglende data vil bli uthevet i rødt. Til dette formål legger vi til en ny stilklasse som heter missing og utvider jQuery Mobile Nedenfor er hendelseshandleren for skjemainnlevering. I typisk jQuery notasjon, identifikatoren for Vi satte et feilflagg til De Etter at alle tidligere uthevede etiketter er tilbakestilt, reagerer vi på det nødvendige I tillegg er feilflagget satt til ekte og feildialogen vises. Figuren nedenfor viser feildialogen i vår Android 2.2-telefon: Etter at brukeren har trykket på OK-knappen, vises brukeren skjema-siden med de manglende feltene uthevet, som vist nedenfor. På det bildet er orienteringen på telefonskjermen horisontal. Vær oppmerksom på at hver etikett og dens søskentekstfelt vises i en enkelt linje i motsetning til den vertikale retningen i figur 3 hvor etiketten ligger over tekstfeltet. På den annen side, hvis validering er vellykket, viser vi overgangsinnholdet og sender skjemaet som omtalt nedenfor. Skjemainnsendelsen bruker jQuery Mobile Legg merke til at In-line-funksjonen for å behandle svaret utføres bare når serveren returnerer svaret. For enkelhets skyld behandler serverprogrammet skjemadataene, Når serverresponsen mottas, utføres hendelseshåndtererkoden. Det første trinnet er å fylle ut Deretter skjuler vi overgangsinnholdet og viser bekreftelsesinnholdet som inneholder Et nytt krav er opprettet basert på data du har sendt inn. Ditt bekreftelsesnummer er: Bekreftelsessiden som vises i vår Android 2.2-telefon vises nedenfor (telefonens orientering er horisontal): Den samme bekreftelsessiden vises på en iPod touch som følger (orienteringen er vertikal): Kildekoden for opplæringen har en enkel mappestruktur. Alle ressurser lagres i en navngitt mappe I denne opplæringen presenterte vi grunnleggende konsepter fra jQuery Mobile rammeverk med fokus på sidestruktur, grunnleggende styling, formelementer og Ajax form innsending. Det ble introdusert en prøvekravbehandlingsapplikasjon for å demonstrere disse konseptene. Vi ga skjermbilder av ulike sider av applikasjonen som kjøres i en Android 2.2-telefon og en iPod touch-enhet med iOS 4.1. Noen observasjoner og avsluttende bemerkninger er gitt nedenfor:gjemme seg()
og vise fram()
Funksjoner gjelder for elementer av mange forskjellige typer, spesielt, (
tags). I denne opplæringen vil vi bruke gjemme seg()
og vise fram()
Fungerer mye for å vise kun den aktuelle konteksten til applikasjonsbrukeren. Flere detaljer er gitt nedenfor.
Trinn 1: Demo Application Page Structure
index.html
, som består av en containerside som vist nedenfor:
data-tema
Attributt lar oss velge mellom tilgjengelige stiler i jQuery Mobile-rammen: a, b, c, d, e,
hver gir et konsekvent sett med farger for forskjellige elementer på siden. For vår søknad valgte vi fargen som tilsvarer b
. data-nobackbtn = "true"
.Formelementer
inngang
felt av typen tekst: Frakt nummer, Fornavn, Etternavn, E-post, Telefon, Gateadresse, By og postnummer. Alle er obligatoriske felt bortsett fra Telefon.å velge
element for stat. dette er et obligatorisk felt.textarea
element for en bruker å legge inn informasjon om manglende eller skadet forsendelse. dette er et obligatorisk felt.
merkelapp
med en til
attributt hvis verdi er den samme som id
av inngang
elementet merkelapp
er festet til. Videre pakket vi inn merkelapp
og inngang
i en div
med data-rolle
attributt verdsatt som fieldcontain
. jQuery Mobile Framework vil benytte fieldcontain
attributt verdi for spesiell styling. I tillegg ser du på name = "shipNo_r"
. For denne spesielle applikasjonen bestemte vi oss for å definere verdien av Navn
attributt for et ønsket formelement som er verdien av id
attributt vedlagt av _r. Hvis elementet ikke er nødvendig, er verdien av Navn
Attributtet vil være det samme som verdien av id
Egenskap. For eksempel, siden Telefon ikke er et obligatorisk felt, defineres det som følger:
å velge
element. I likhet med ovenstående, verdien av til
Attributtet er det samme som ID for å velge
elementet merkelapp
er festet til. Også, den merkelapp
og å velge
er pakket inn i a div
med data-rolle
attributt verdi som fieldcontain
. Med den lange listen over alternativer vi har i denne applikasjonen, åpner jQuery Mobile rammeverket listen på en ny side når brukeren fokuserer på å velge
element.
Trinn 2: Variabeldefinisjoner
hode
delen av siden:
$ (Document) .ready ()
Fungerer ved hjelp av ID-seleksjoner, som vist nedenfor. (Husk at jQuery $ (Document) .ready ()
funksjon kalles når hele DOM-hierarkiet i siden er lastet inn. Den funksjonen er det beste stedet å initialisere våre variabler.) Vi definerer også inputMapVar
som en samling bestående av alle inngang
elementer med _R
i deres Navn
attributt (Funksjonsanropet $ ( 'Inngang [navn * = "_ r"]')
velger alle slike elementer).
Trinn 3: Innholdsvalgfunksjoner
hideMain ()
og showMain ()
funksjoner: funksjon hideMain () hdrMainVar.hide (); contentMainVar.hide (); ftrMainVar.hide (); funksjon showMain () hdrMainVar.show (); contentMainVar.show (); ftrMainVar.show ();
hideContentTransition ()
og showContentTransition ()
funksjoner: funksjon hideContentTransition () contentTransitionVar.hide (); funksjon showContentTransition () contentTransitionVar.show ();
hideContentDialog ()
og showContentDialog ()
funksjoner: funksjon hideContentDialog () contentDialogVar.hide (); funksjon showContentDialog () contentDialogVar.show ();
hideConfirmation ()
og showConfirmation ()
funksjoner: funksjon hideConfirmation () hdrConfirmationVar.hide (); contentConfirmationVar.hide (); ftrConfirmationVar.hide (); funksjonsvisningKonfirmasjon () hdrConfirmationVar.show (); contentConfirmationVar.show (); ftrConfirmationVar.show ();
Trinn 4: Form Innlevering
Form validering
merkelapp
klasse. label.missing color: # FF0000; font-vekt: bold;
Form1
sendes til jQuery-objektsamtalen for å håndtere innleveringshendelsen: $ ('# form1'). send inn (funksjon () var err = false; // Skjul hovedinnhold hideMain (); // Tilbakestill de tidligere uthevede formelementene stateLabelVar.removeClass (MISSING); whatLabelVar.removeClass (MISSING) ; inputMapVar.each (funksjon (indeks) $ (dette) .prev (). removeClass (MISSING);); // Utfør form validering inputMapVar.each (funksjon (indeks) hvis ($ (dette) .val ) == null || $ (dette) .val () == TOM) $ (dette) .prev (). addClass (MISSING); err = true;), hvis (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); err = true; hvis (whatVar.val () == null || whatVar.val () == TOM) whatLabelVar.addClass (MISSING); err = true; / / Hvis validering mislykkes, vis dialoginnhold hvis (err == true) showContentDialog (); return false; // Hvis validering passerer, vis Overgang innhold showContentTransition (); // Send skjema $ .post ("/ skjema / requestProcessor.php ", form1Var.serialize (), funksjon (data) confirmationVar.text (data); hideContentTransition (); showConfirmation ();); return false;);
falsk
og skjul hovedinnholdet som inneholder skjemaet. Vi nullstiller de tidligere merkede etikettene på hvert medlem av samlingen inputMapVar
. For å gjøre det, sender vi en inline-funksjon som et argument til Hver()
som bare inneholder . $ (Dette) .prev () removeClass (MISSING);
. Noter det dette
er valgt inngang
element og prev ()
returnerer sin umiddelbare tidligere søsken som er merkelapp
forbundet med det.stat
for statsvalg og hva
for kravbeskrivelse er ikke tekstfelt. Derfor har de tilsvarende etikettene sine stiler tilbakestilt separat.inngang
elementer for å sjekke om noen av dem har en manglende verdi. Hvis så er tilfelle, legger vi til den manglende klassen på etiketten som er knyttet til inntastingsfeltet: // Utfør skjema validering inputMapVar.each (funksjon (indeks) hvis ($ (dette) .val () == null || $ (dette) .val () == TOM) $ (this) .prev .addClass (MISSING); err = true;); hvis (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); feil = true; hvis (whatVar.val () == null || whatVar.val () == TOM) whatLabelVar.addClass (MISSING); feil = true;
Sende skjemaet via Ajax
post
funksjon som aksepterer tre argumenter: $ .post ("/ forms / requestProcessor.php", form1Var.serialize (), funksjon (data) ...);
serialiserer ()
på jQuery-objektet ved å sende det til identifikatoren for vårt skjema.data
, sendt tilbake fra serveren.post
funksjonen utfører et Ajax-anrop som er asynkron av natur. Umiddelbart etter å ringe post
, Programgjennomføringen fortsetter ved å returnere falsk fra sende inn
funksjon og bruker vil begynne å se overgangsinnholdet.requestProcessor.php
, Returnerer et hardkodet krav-ID for brukeren å bruke til fremtidig referanse. Før du sender kravet ID requestProcessor.php
, Det sover 4 sekunder for å etterligne serverens behandlingstid. Det er i denne perioden at søknaden viser overgangsinnholdet.
span
tag kalt bekreftelse
med verdien returnert fra serveren. Dette gjøres enkelt med: confirmationVar.text (data);
span
tag kalt bekreftelse
:
Implementere kildekoden
skjemaer
. I den mappen er det to undermapper, css
og img
. De css
mappen inneholder colors.css
, som har label.missing
klasse, og img
butikker wait.gif
, spinneren bildet. De index.html
og requestProcessor.php
filer er direkte under skjemaer
mappe. I testen brukte vi en Apache webserver med versjon 2.2.11 som kjører PHP versjon 5.3.0. Hvis du plasserer skjemaer
mappe direkte under Document
av webserveren, kan du få tilgang til programmet via http: // [your_host_name] /folder/index.html.
Konklusjon