jQuery Mobile är ett relativt nytt mobilt webbramverk med sin första release som gjordes i oktober 2010. Ramverket har många intressanta funktioner för att stödja utvecklingen av webbaserade mobila applikationer. I denna handledning kommer vi att fokusera på några grundläggande element i jQuery Mobile: sidstruktur, formulär och Ajax formulärinsändning. Handledningen bygger på version 1.0 alfa release 2 i jQuery Mobile-ramen.
Som en del av handledningen skriver vi en liten B2C-applikation. Ett paketleveransföretag har en blankett på deras hemsida för att kunder ska kunna skriva in information om paket som är förlorade eller skadade vid leverans. Med hjälp av en handhållen enhet (t.ex. en webbaktiverad telefon) matar en kund information till formuläret om deras påstående: leveransnumret från det ursprungliga kvittot, namn / adress och en beskrivning av förlust / skada. När kunden skickar in formuläret svarar webbplatsen med ett fordrings-ID för vidare spårning. Scenariot visas i diagrammet nedan:
jQuery Mobile Framework stöder en mängd olika webbläsare, inklusive iOS-enheter, Android-enheter, Blackberry OS 6 och webOS (för en supportmatris, se http://jquerymobile.com/gbs/). Applikationen i denna handledning har testats mot en Android 2.2-enhet och en iOS 4.1-enhet.
Innan vi går in i tekniska detaljer, låt oss prata om huvudhänsyn som driver designen av applikationen.
Naturligtvis kommer en typisk verklig applikation att ha ytterligare eller olika designproblem. För syftet med denna handledning begränsas vårt räckvidd till ovanstående överväganden.
Merparten av diskussionen i detta avsnitt har lånats från dokumentationen på http://jquerymobile.com. Se originalreferensen för ytterligare detaljer.
jQuery Mobile är ett användargränssnitt som bygger på den populära JavaScript-ramen jQuery. Den består av användargränssnitt och programmeringskonstruktioner som ger konsekvent funktionalitet över en mängd olika mobila och stationära webbläsare. Principerna "Progressiv Förbättring" och "Graciös Nedbrytning" ligger bakom dess design. Kärnfunktionaliteten i ramen stöder en bred uppsättning av plattformar, medan nyare plattformar drar nytta av mer förbättrade funktioner.
jQuery Mobile har ett relativt litet fotavtryck. Eftersom grundkonfigurationen av en jQuery Mobile-sida görs rent av markering är det möjligt att uppnå snabba utvecklingscykler, särskilt om din applikation inte behöver komplexa programmeringsfunktioner. Även om det är byggt på jQuery-kärnan, bygger tematiskt system av jQuery Mobile på en ny CSS-ram som syftar till att skilja färg och textur från strukturella stilar som definierar saker som vaddering och dimensioner. Ett API för händelsehantering hanterar användarinmatningsmetoder för beröra, mus och markörer på ett enhetligt sätt.
jQuery Mobile kommer ut ur rutan med många användargränssnitt, till exempel verktygsfältet i sidhuvud och sidfot, knappar med ikoner, formulärelement (inklusive pekskärmsreglage och växlar) och listor. Grundläggande HTML-stilar, två eller tre kolumngridar och hopfällbara element tillhandahålls också.
När det gäller jQuery Mobile 1.0 alpha 2-versionen måste följande stylesheet och JavaScript-bibliotek inkluderas i dina HTML-sidor. Du kan referera dem enligt nedan eller servera dem från din egen server:
Låt oss presentera den grundläggande strukturen för en sida i jQuery Mobile. En sida i jQuery Mobile-ramverket kan vara en enda sida eller en lokal intern länkad sida på en sida. En "container" -sida kommer att innehålla en eller flera "innehåll" -sidor. Gränsen för en behållarsida definieras enligt följande:
...
Observera att värdet av data roll
attributet är sida
. Å andra sidan definieras gränsen för en innehållssida enligt följande:
...
Observera att värdet av data roll
attributet är innehåll
.
En innehållssida kan ha en associerad rubrik och sidfot. Som exempel kan en behållarsida med flera innehållssidor ha följande struktur:
.....................
När en behållarsida laddas, kommer alla innehållssidor i det att vara synliga. I vår ansökan behöver vi bara visa ett innehåll åt gången. Därför måste vi programmässigt styra vilket innehåll som ska visas beroende på sammanhang.
För att dölja ett element, använd jQuery Mobile API Dölj()
fungera:
$ (# HdrMain) dölja ().
kommer att gömma rubriken med id
hdrMain
. Här använde vi jQuery ID-väljaren genom att passera id
av det element som vi skulle vilja välja på förhand av #
skylt. Omvänt show()
funktionen visar ett dolt element:
$ (# HdrMain) visa ().
De Vår demo ansökan består av en enda html-sida, Innehållsövergångar visas i diagrammet nedan: Ytterligare observationer på kodlistan ovan: Vårt fordringsformulär består av följande områden: Låt oss till exempel titta på textfältet för leveransnummer: Vi använde a Som vi kommer att se senare kommer den här speciella namngivningskonventionen att hjälpa oss att upptäcka saknade fält under formulärinsändning. Ett annat anmärkningsvärt formelement är Formulärsidan som visas i en Android 2.2-telefon visas nedan. Användaren kommer att bläddra igenom sidan för att komma åt elementen i formuläret: Samma blankett visas i en iPod touch som kör iOS 4.1: Vi hänvisar till olika delar på HTML-sidan i hela vår kod. Det är vettigt att definiera dessa referenser en gång och återanvända dem efter behov. Av denna anledning förklarar vi globalt använda variabler såväl som konstanter i Uppdrag av de variablerna görs i jQuery Låt oss nu titta på innehållsvalfunktionerna som kommer att ringas av händelsehanterare. För att gömma och visa huvudinnehållet och dess rubrik / sidfot använder vi För att gömma och visa övergångsinnehåll använder vi För att gömma och visa dialoginnehållet använder vi Slutligen, för att dölja och visa bekräftelsemeddelandet och dess rubrik / sidfot använder vi När sidan är laddad ska endast huvudinnehållet visas. Av denna anledning är andra innehållssidor dolda: Vi kommer att diskutera hur man sammanfogar dessa innehållsvalsfunktioner med händelsehanterare nedan. När en användare trycker på inmatningsknappen måste vi validera formulärdata innan vi skickar in formuläret. För att hålla sakerna enkla kontrollerar vi bara om alla obligatoriska fält har lämnats. Om formulärvalidering lyckas visar vi övergångsinnehållet som består av en spinnarbild med en kort text som informerar användaren om att deras formulär skickas in. Om validering misslyckas visar vi dialogrutans innehåll som består av en varning och en OK-knapp för att stänga dialogrutan. Etiketter på formulärelementen med saknade data markeras i rött. För detta ändamål lägger vi till en ny stilklass som heter missing och utökar jQuery Mobile Nedan är evenemangshanteraren för formulärinsändning. I typisk jQuery-notation, identifieraren för Vi satte ett felflagga till De När alla tidigare markerade etiketter är nollställda återgår vi de nödvändiga Dessutom är felflaggan satt till sann och feldialogrutan visas. Figuren nedan visar feldialogrutan i vår Android 2.2-telefon: När användaren har tryckt på OK-knappen visas användaren formulärsidan med de saknade fälten markerade, som visas nedan. I den bilden är orienteringen på telefonskärmen horisontell. Observera att varje etikett och dess syskon textfält visas i en enda linje i motsats till den vertikala orienteringen i Figur 3 där etiketten ligger ovanför textfältet. Å andra sidan, om valideringen är framgångsrik visar vi övergångsinnehållet och skickar formuläret som diskuteras nedan. Formulärinsändningen använder jQuery Mobile Observera att In-line-funktionen för att bearbeta svaret utförs endast när servern returnerar sitt svar. För enkelhetens behandling bearbetar serverns ansökningsformuläret, När serverns svar är mottagen, körs händelseshanterarkoden. Det första steget är att fylla i Därefter gömmer vi övergångsinnehållet och visar bekräftelseinnehållet som innehåller En ny fordran har skapats baserat på data du har skickat. Ditt bekräftelsesnummer är: Bekräftelsessidan som visas i vår Android 2.2-telefon visas nedan (telefonens riktning är horisontell): Samma bekräftelsessida visas på en iPod touch enligt följande (orienteringen är vertikal): Källkoden för handledningen har en enkel mappstruktur. Alla resurser lagras i en mapp som heter I denna handledning introducerade vi grundläggande koncept från jQuery Mobile-ramverket med fokus på sidestruktur, grundläggande styling, formulärelement och Ajax-formulärinsändning. Ett provkrav behandlingsansökan infördes för att visa dessa begrepp. Vi gav skärmdumpar av olika sidor av programmet som körs i en Android 2.2-telefon och en iPod touch-enhet med iOS 4.1. Några observationer och avslutande kommentarer ges nedan:Dölj()
och show()
Funktionerna gäller särskilt delar av många olika typer, (
taggar). I denna handledning kommer vi att använda Dölj()
och show()
fungerar i stor utsträckning för att bara visa det relevanta sammanhanget för applikationsanvändaren. Mer detaljer ges nedan.
Steg 1: Demo Application Page Structure
index.html
, som består av en behållarsida som visas nedan:
uppgifter-theme
attributet tillåter oss att välja mellan tillgängliga stilar i jQuery Mobile-ramen: a, b, c, d, e,
var och en ger en konsekvent uppsättning färger för olika element på sidan. För vår ansökan valde vi den färg som motsvarade b
. data nobackbtn = "true"
.Formelement
inmatning
Fält av typtext: Fraktnummer, Förnamn, Efternamn, E-post, Telefon, Gatuadress, Ort och Postnummer. Alla är obligatoriska fält utom Telefon.Välj
element för staten. detta är ett obligatoriskt fält.textarea
element för att en användare ska ange information om den saknade eller skadade försändelsen. detta är ett obligatoriskt fält.
märka
med en för
attribut vars värde är detsamma som id
av inmatning
elementet i märka
är kopplad till. Dessutom slingrade vi märka
och inmatning
i en div
med data roll
attribut värderat som fieldcontain
. jQuery Mobile Framework kommer att använda fieldcontain
attributvärde för special styling. Dessutom titta på name = "shipNo_r"
. För den här applikationen bestämde vi oss för att definiera värdet av namn
attribut av något obligatoriskt formelement som är värdet av id
attribut som bifogas av _r. Om elementet inte är nödvändigt, måste värdet av namn
attributet kommer att vara detsamma som värdet av id
attribut. Eftersom Telefon exempelvis inte är ett obligatoriskt fält definieras det som följer:
Välj
element. Liknande ovanstående, värdet av för
Attributet är detsamma som ID för Välj
elementet i märka
är kopplad till. Även märka
och Välj
är inslagna i a div
med data roll
ange värdet som fieldcontain
. Med den långa listan över alternativ som vi har i den här applikationen öppnar jQuery Mobile-ramverket listan på en ny sida när användaren fokuserar på Välj
element.
Steg 2: Variabla definitioner
huvud
avsnitt av sidan:
$ (Dokument) .ready ()
funktion med ID-selektorer, som visas nedan. (Minns det jQuery $ (Dokument) .ready ()
funktion kallas när hela DOM-hierarkin i sidan är laddad. Den funktionen är det bästa stället att initiera våra variabler.) Vi definierar också inputMapVar
som en samling som består av alla inmatning
element med _R
i deras namn
attribut (Funktionssamtalet $ ( 'Input [namn * = "_ r"]')
väljer alla sådana element).
Steg 3: Innehållsval Funktioner
hideMain ()
och showMain ()
funktioner: funktion hideMain () hdrMainVar.hide (); contentMainVar.hide (); ftrMainVar.hide (); funktion showMain () hdrMainVar.show (); contentMainVar.show (); ftrMainVar.show ();
hideContentTransition ()
och showContentTransition ()
funktioner: funktion hideContentTransition () contentTransitionVar.hide (); funktion showContentTransition () contentTransitionVar.show ();
hideContentDialog ()
och showContentDialog ()
funktioner: funktion hideContentDialog () contentDialogVar.hide (); funktion showContentDialog () contentDialogVar.show ();
hideConfirmation ()
och showConfirmation ()
funktioner: funktion hideConfirmation () hdrConfirmationVar.hide (); contentConfirmationVar.hide (); ftrConfirmationVar.hide (); funktionskonfiguration () hdrConfirmationVar.show (); contentConfirmationVar.show (); ftrConfirmationVar.show ();
Steg 4: Blankettinsändning
Form validering
märka
klass. label.missing color: # FF0000; font-weight: bold;
Form1
skickas till jQuery-objektsamtalet för att hantera inlämningsevenemanget: $ ('# form1'). Skicka (funktion ) var err = false; // Dölj huvudinnehåll hideMain (); // Återställ de tidigare markerade formulärelementen stateLabelVar.removeClass (MISSING); whatLabelVar.removeClass (MISSING) ; inputMapVar.each (funktion (index) $ (this) .prev (). removeClass (MISSING);); // Utför formvalideringsinmatningMapVar.each (funktion (index) if ($ (this) .val ) == null || $ (detta) .val () == TOM) $ (detta) .prev (). addClass (MISSING); err = true;), om (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); err = true; om (whatVar.val () == null || whatVar.val () == TOM) whatLabelVar.addClass (MISSING); err = true; / / Om valideringen misslyckas, visa Dialoginnehåll om (err == true) showContentDialog (); return false; // Om validering passerar, visa Övergång innehåll showContentTransition (); // Skicka formuläret $ .post ("/ formulär / requestProcessor.php ", form1Var.serialize (), funktion (data) confirmationVar.text (data); hideContentTransition (); showConfirmation ();); return false;);
falsk
och gömma huvudinnehållet som innehåller formuläret. Vi nollställer sedan de tidigare markerade etiketterna på varje medlem i samlingen inputMapVar
. För att göra det passerar vi en inline-funktion som ett argument till varje()
som helt enkelt innehåller . $ (This) .prev () removeClass (saknas);
. Anteckna det detta
är den valda inmatning
element och prev ()
returnerar sin omedelbara tidigare syskon som är märka
associerad med det.stat
för statligt urval och Vad
för kravbeskrivning är inte textfält. Därför har motsvarande etiketter sina stilar återställda separat.inmatning
element för att kontrollera om någon av dem har ett saknat värde. Om så är fallet lägger vi till den saknade klassen på etiketten som är associerad med inmatningsfältet: // Utför formvalideringsinmatningMapVar.each (funktion (index) om ($ (detta) .val () == null || $ (detta) .val () == Töm) $ (this) .prev .addClass (MISSING); err = true;); om (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); err = true; om (whatVar.val () == null || whatVar.val () == Töm) whatLabelVar.addClass (MISSING); err = true;
Skicka in formuläret via Ajax
posta
funktion som accepterar tre argument: $ .post ("/ formulär / requestProcessor.php", form1Var.serialize (), funktion (data) ...);
serialisera ()
på jQuery-objektet genom att skicka den till identifieraren för vår blankett.data
, skickas tillbaka från servern.posta
funktionen utför ett Ajax-samtal som är asynkront av naturen. Omedelbart efter att ha ringt posta
, programkörning fortsätter genom att returnera falskt från lämna
funktionen och användaren börjar visa övergångsinnehållet.requestProcessor.php
, returnerar en hårdkodad fordran id för användaren att använda för framtida referens. Innan du skickar fordran id requestProcessor.php
, Det sover 4 sekunder för att emulera serverens bearbetningstid. Det är under denna period att programmet visar övergångsinnehållet.
spänna
taggen heter Bekräftelse
med värdet som returneras från servern. Detta görs enkelt med: confirmationVar.text (data);
spänna
taggen heter Bekräftelse
:
Implementera källkoden
former
. I den mappen finns det två undermappar, css
och img
. De css
mappen innehåller colors.css
, som har label.missing
klass och img
butiker wait.gif
, spinnarbilden. De index.html
och requestProcessor.php
filer är direkt under former
mapp. I vår testning använde vi en Apache webbserver med version 2.2.11 som kör PHP version 5.3.0. Om du placerar former
mapp direkt under Document
på webbservern kan du komma åt programmet via http: // [your_host_name] /folder/index.html.
Slutsats