jQuery Mobile ist ein relativ neues mobiles Web-Framework, dessen erste Veröffentlichung im Oktober 2010 erfolgte. Das Framework bietet viele interessante Funktionen zur Unterstützung der Entwicklung von webbasierten mobilen Anwendungen. In diesem Tutorial konzentrieren wir uns auf einige grundlegende Elemente von jQuery Mobile: Seitenstruktur, Formulare und Ajax-Formularübergabe. Das Lernprogramm basiert auf Version 1.0 Alpha Release 2 des jQuery Mobile-Frameworks.
Als Teil des Tutorials schreiben wir eine kleine B2C-Anwendung. Ein Paketversandunternehmen hat auf seiner Website ein Formular, in das Kunden Informationen zu Paketen eingeben können, die während des Versands verloren oder beschädigt wurden. Über ein Handgerät (z. B. ein internetfähiges Telefon) gibt ein Kunde Informationen zu seinem Antrag in das Formular ein: die Sendungsnummer aus dem Originalbeleg, den Namen / die Adresse und eine Beschreibung des Verlusts / Schadens. Wenn der Kunde das Formular übermittelt, antwortet die Website mit einer Antrags-ID zur weiteren Verfolgung. Das Szenario ist in der folgenden Abbildung dargestellt:
Das jQuery Mobile-Framework unterstützt eine Vielzahl von Browsern, einschließlich iOS-Geräten, Android-Geräten, Blackberry OS 6 und webOS (eine Support-Matrix finden Sie unter http://jquerymobile.com/gbs/). Die Anwendung in diesem Lernprogramm wurde mit einem Android 2.2-Gerät und einem iOS 4.1-Gerät getestet.
Bevor wir uns mit technischen Details beschäftigen, lassen Sie uns über die wichtigsten Aspekte beim Design der Anwendung sprechen.
Natürlich hat eine typische reale Anwendung zusätzliche oder andere Designbedenken. Für die Zwecke dieses Tutorials ist unser Umfang auf die obigen Überlegungen beschränkt.
Die meisten Diskussionen in diesem Abschnitt wurden aus der Dokumentation in http://jquerymobile.com übernommen. Weitere Einzelheiten finden Sie in der Originalreferenz.
jQuery Mobile ist ein Benutzeroberflächensystem, das auf dem beliebten JavaScript-Framework jQuery basiert. Es besteht aus Elementen der Benutzeroberfläche und Programmierkonstrukten, die konsistente Funktionen für eine Vielzahl von mobilen und Desktop-Webbrowsern bieten. Die Prinzipien "Progressive Enhancement" und "Graceful Degradation" stehen hinter seinem Design. Die Kernfunktionalität des Frameworks unterstützt eine breite Palette von Plattformen, während neuere Plattformen von erweiterten Funktionen profitieren.
jQuery Mobile hat einen relativ geringen Footprint. Da die Grundkonfiguration einer jQuery Mobile-Seite ausschließlich über Markup erfolgt, können schnelle Entwicklungszyklen erzielt werden, insbesondere wenn Ihre Anwendung keine komplexen Programmierfunktionen benötigt. Obwohl es auf jQuery Core basiert, basiert das Themingsystem von jQuery Mobile auf einem neuen CSS-Framework, das die Trennung von Farbe und Textur von Strukturstilen zum Ziel hat, die beispielsweise Füllungen und Bemaßungen definieren. Eine Ereignisbehandlungs-API behandelt die Benutzereingabemethoden für Berührungs-, Maus- und Cursorfokus auf einheitliche Weise.
jQuery Mobile ist mit zahlreichen Benutzeroberflächenelementen wie Symbolleisten für Kopf- und Fußzeilen, Schaltflächen mit Symbolen, Formularelementen (einschließlich berührungsempfindlicher Schieberegler und Umschaltern) und Listen ausgestattet. Außerdem werden grundlegende HTML-Stile, zwei oder drei Spaltenraster und reduzierbare Elemente bereitgestellt.
Ab jQuery Mobile 1.0 alpha 2 müssen die folgenden Stylesheet- und JavaScript-Bibliotheken in Ihre HTML-Seiten aufgenommen werden. Sie können sie wie folgt referenzieren oder von Ihrem eigenen Server aus bedienen:
Lassen Sie uns die grundlegende Struktur einer Seite in jQuery Mobile vorstellen. Eine Seite im jQuery Mobile-Framework kann eine einzelne Seite oder eine lokal verknüpfte interne Seite innerhalb einer Seite sein. Eine "Containerseite" enthält eine oder mehrere "Inhaltsseiten". Die Grenze einer Containerseite ist wie folgt definiert:
…
Beachten Sie, dass der Wert von Datenrolle
Attribut ist Seite
. Andererseits ist die Grenze einer Inhaltsseite wie folgt definiert:
…
Beachten Sie, dass der Wert von Datenrolle
Attribut ist Inhalt
.
Eine Inhaltsseite kann eine zugehörige Kopf- und Fußzeile haben. Beispielsweise kann eine Containerseite mit mehreren Inhaltsseiten die folgende Struktur haben:
…………………
Wenn eine Containerseite geladen wird, sind alle darin enthaltenen Inhaltsseiten sichtbar. In unserer Anwendung müssen wir jeweils nur einen Inhalt anzeigen. Daher müssen wir programmgesteuert steuern, welcher Inhalt je nach Kontext angezeigt wird.
Um ein Element auszublenden, verwenden Sie die jQuery Mobile-API verbergen()
Funktion:
$ ('# hdrMain'). hide ();
wird den Header mit ausblenden Ich würde
hdrMain
. Hier haben wir den jQuery-ID-Selektor verwendet, indem wir übergeben haben Ich würde
von dem Element, das wir vor auswählen möchten #
Zeichen. Umgekehrt die Show()
Funktion zeigt ein verstecktes Element:
$ ('# hdrMain'). show ();
Das Unsere Demoanwendung besteht aus einer einzigen HTML-Seite, Inhaltsübergänge sind in der folgenden Abbildung dargestellt: Zusätzliche Anmerkungen zur obigen Codeliste: Unser Anspruchsformular besteht aus folgenden Bereichen: Betrachten wir als Beispiel das Textfeld für die Versandnummer: Wir haben a verwendet Wie wir später sehen werden, hilft uns diese spezielle Namenskonvention dabei, fehlende Felder während der Formularübermittlung zu erkennen. Ein weiteres bemerkenswertes Formularelement ist das Die Formularseite, die in einem Android 2.2-Telefon angezeigt wird, ist unten dargestellt. Der Benutzer blättert durch die Seite, um auf die Elemente im Formular zuzugreifen: Das gleiche Formular wird auf einem iPod touch mit iOS 4.1 angezeigt: Wir werden in unserem Code auf verschiedene Elemente der HTML-Seite verweisen. Es ist sinnvoll, diese Referenzen nur einmal zu definieren und bei Bedarf wiederzuverwenden. Aus diesem Grund deklarieren wir sowohl global verwendete Variablen als auch Konstanten im Zuweisungen dieser Variablen werden in jQuery vorgenommen Lassen Sie uns nun die Inhaltsauswahlfunktionen betrachten, die von Ereignishandlern aufgerufen werden. Zum Ausblenden und Anzeigen des Hauptinhalts und seiner Kopf- / Fußzeile verwenden wir die Zum Ausblenden und Anzeigen des Übergangsinhalts verwenden wir die Zum Ausblenden und Anzeigen des Dialoginhalts verwenden wir die Zum Ausblenden und Anzeigen des Bestätigungsinhalts und seiner Kopf- / Fußzeile verwenden wir schließlich die Wenn die Seite geladen ist, sollte nur der Hauptinhalt angezeigt werden. Aus diesem Grund werden andere Inhaltsseiten ausgeblendet: Wir werden besprechen, wie diese Inhaltsauswahlfunktionen mit den Ereignishandlern unten verknüpft werden können. Wenn ein Benutzer auf die Schaltfläche "Senden" klickt, müssen wir die Formulardaten vor dem Senden des Formulars überprüfen. Der Einfachheit halber prüfen wir nur, ob alle erforderlichen Felder angegeben wurden. Wenn die Formularvalidierung erfolgreich ist, zeigen wir den Übergangsinhalt an, der aus einem Spinner-Bild mit einem kurzen Text besteht, der den Benutzer darüber informiert, dass sein Formular gesendet wird. Wenn die Überprüfung fehlschlägt, wird der Dialoginhalt angezeigt, der aus einer Warnung und einer OK-Schaltfläche besteht, um den Dialog zu schließen. Beschriftungen der Formularelemente mit fehlenden Daten werden rot hervorgehoben. Zu diesem Zweck fügen wir eine neue Stilklasse hinzu, die den Namen missing enthält und die jQuery Mobile-Erweiterung erweitert Unten ist der Event-Handler für die Formularübermittlung. In der typischen jQuery-Notation der Bezeichner für Wir setzen ein Fehlerflag auf Das Nachdem alle zuvor markierten Beschriftungen zurückgesetzt wurden, besuchen wir die erforderlichen Etiketten erneut Zusätzlich wird das Fehlerflag auf true gesetzt und der Fehlerdialog angezeigt. Die folgende Abbildung zeigt den Fehlerdialog in unserem Android 2.2-Telefon: Nachdem der Benutzer die OK-Taste gedrückt hat, wird dem Benutzer die Formularseite mit den fehlenden Feldern angezeigt (siehe unten). In diesem Bild ist der Bildschirm des Telefons horizontal ausgerichtet. Beachten Sie, dass jedes Label und sein gleichgeordnetes Textfeld in einer einzelnen Zeile angezeigt werden, im Gegensatz zur vertikalen Ausrichtung in Abbildung 3, in der sich das Label über dem Textfeld befindet. Wenn die Validierung jedoch erfolgreich ist, zeigen wir den Übergangsinhalt und senden das Formular wie unten beschrieben ab. Die Formularübermittlung verwendet jQuery Mobile Notiere dass der Die Inline-Funktion zur Verarbeitung der Antwort wird nur ausgeführt, wenn der Server seine Antwort zurückgibt. Zur Vereinfachung verarbeitet die Serveranwendung die Formulardaten, Wenn die Serverantwort empfangen wird, wird der Ereignishandlercode ausgeführt. Der erste Schritt ist das Auffüllen der Dann blenden wir den Übergangsinhalt aus und zeigen den Bestätigungsinhalt an, der den enthält Auf der Grundlage der von Ihnen übermittelten Daten wurde ein neuer Anspruch erstellt. Ihre Bestätigungsnummer lautet: Die Bestätigungsseite, die in unserem Android 2.2-Telefon angezeigt wird, wird unten angezeigt (die Ausrichtung des Telefons ist horizontal): Die gleiche Bestätigungsseite wird auf einem iPod touch wie folgt angezeigt (Ausrichtung ist vertikal): Der Quellcode für das Lernprogramm hat eine einfache Ordnerstruktur. Alle Ressourcen werden in einem Ordner mit dem Namen gespeichert In diesem Tutorial haben wir grundlegende Konzepte aus dem jQuery Mobile-Framework mit den Schwerpunkten Seitenstruktur, grundlegendes Styling, Formularelemente und Ajax-Formularübergabe vorgestellt. Eine Beispielanwendung zur Bearbeitung von Ansprüchen wurde eingeführt, um diese Konzepte zu veranschaulichen. Wir haben Screenshots von verschiedenen Seiten der Anwendung bereitgestellt, die auf einem Android 2.2-Telefon und einem iPod touch-Gerät mit iOS 4.1 ausgeführt werden. Einige Bemerkungen und Schlussbemerkungen sind unten aufgeführt:verbergen()
und Show()
Funktionen gelten insbesondere für Elemente verschiedenster Art, (
Stichworte). In diesem Tutorial verwenden wir verbergen()
und Show()
Funktionen umfassend, um dem Anwendungsbenutzer nur den relevanten Kontext anzuzeigen. Weitere Details sind unten angegeben.
Schritt 1: Seitenstruktur der Demo-Anwendung
index.html
, bestehend aus einer Containerseite wie unten gezeigt:
Daten-Thema
Mit diesem Attribut können wir aus den verfügbaren Stilen im jQuery Mobile-Framework auswählen: a, b, c, d, e,
Jeder stellt einen konsistenten Satz von Farben für verschiedene Elemente auf der Seite bereit. Für unsere Anwendung haben wir die entsprechende Farbe ausgewählt b
. data-nobackbtn = "true"
.Formularelemente
Eingang
Textfelder des Typs: Versandnummer, Vorname, Nachname, E-Mail, Telefon, Straße, Ort und Postleitzahl. Alle sind Pflichtfelder außer Telefon.wählen
Element für State. Das ist ein Pflichtfeld.Textbereich
Element für einen Benutzer, um Informationen über die fehlende oder beschädigte Sendung einzugeben. Das ist ein Pflichtfeld.
Etikette
mit einer zum
Attribut, dessen Wert mit dem gleich ist Ich würde
des Eingang
Element der Etikette
hängt an. Außerdem haben wir die verpackt Etikette
und Eingang
in einem div
mit Datenrolle
Attribut als bewertet Feldinhalt
. Das jQuery Mobile-Framework verwendet das Feldinhalt
Attributwert für das spezielle Styling. Schauen Sie sich zusätzlich an name = "shipNo_r"
. Für diese spezielle Anwendung haben wir uns entschieden, den Wert von zu definieren Name
Attribut eines beliebigen Formularelements als Wert von Ich würde
Attribut angehängt von _r. Wenn das Element nicht erforderlich ist, wird der Wert von Name
Das Attribut entspricht dem Wert von Ich würde
Attribut. Da Phone beispielsweise kein Pflichtfeld ist, wird es wie folgt definiert:
wählen
Element. Ähnlich wie oben, der Wert von zum
Attribut ist identisch mit der ID von wählen
Element der Etikette
hängt an. Auch die Etikette
und wählen
sind in einer verpackt div
mit dem Datenrolle
Attributwert als Feldinhalt
. Mit der langen Liste von Optionen, die wir in dieser Anwendung haben, öffnet das jQuery Mobile-Framework die Liste auf einer neuen Seite, wenn sich der Benutzer auf die wählen
Element.
Schritt 2: Variablendefinitionen
Kopf
Abschnitt der Seite:
$ (Dokument) .ready ()
Funktion mit ID-Selektoren, wie unten gezeigt. (Erinnere dich an jQuery $ (Dokument) .ready ()
Die Funktion wird aufgerufen, wenn die gesamte DOM-Hierarchie in der Seite geladen ist. Diese Funktion ist der beste Ort, um unsere Variablen zu initialisieren.) Wir definieren auch inputMapVar
als eine Sammlung von allem Eingang
Elemente mit _r
in ihren Name
Attribut (Der Funktionsaufruf $ ('input [name * = "_ r"]')
wählt alle solche Elemente aus).
Schritt 3: Inhaltsauswahlfunktionen
hideMain ()
und showMain ()
Funktionen: function hideMain () hdrMainVar.hide (); contentMainVar.hide (); ftrMainVar.hide (); function showMain () hdrMainVar.show (); contentMainVar.show (); ftrMainVar.show ();
hideContentTransition ()
und showContentTransition ()
Funktionen: function hideContentTransition () contentTransitionVar.hide (); function showContentTransition () contentTransitionVar.show ();
hideContentDialog ()
und showContentDialog ()
Funktionen: function hideContentDialog () contentDialogVar.hide (); function showContentDialog () contentDialogVar.show ();
hideConfirmation ()
und showConfirmation ()
Funktionen: function hideConfirmation () hdrConfirmationVar.hide (); contentConfirmationVar.hide (); ftrConfirmationVar.hide (); function showConfirmation () hdrConfirmationVar.show (); contentConfirmationVar.show (); ftrConfirmationVar.show ();
Schritt 4: Formular einreichen
Formularvalidierung
Etikette
Klasse. label.missing color: # FF0000; Schriftdicke: fett;
Form 1
wird an den jQuery-Objektaufruf übergeben, um das Submit-Ereignis zu behandeln: $ ('# form1'). submit (function () var err = false; // Den Hauptinhalt ausblenden hideMain (); // Die zuvor hervorgehobenen Formularelemente zurücksetzen stateLabelVar.removeClass (MISSING); whatLabelVar.removeClass (MISSING) ; inputMapVar.each (function (index) $ (this) .prev (). removeClass (MISSING);); // Formularvalidierung durchführen inputMapVar.each (function (index) if ($ (this) .val ( ) == null || $ (this) .val () == EMPTY) $ (this) .prev (). addClass (MISSING); err = true;); if (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); err = true; if (whatVar.val () == null || whatVar.val () == EMPTY) whatLabelVar.addClass (MISSING); err = true; / / Wenn die Validierung fehlschlägt, zeigen Sie den Dialoginhalt an, wenn (err == true) showContentDialog (); false zurückgibt. // Wenn die Validierung erfolgreich ist, zeigen Sie den Transition-Inhalt an. ShowContentTransition (); // Senden Sie das Formular $ .post ("/ forms / requestProcessor.php ", form1Var.serialize (), function (data) confirmVar.text (data); hideContentTransition (); showConfirmation ();); return false;);
falsch
und blenden Sie den Hauptinhalt aus, der das Formular enthält. Wir setzen dann die zuvor hervorgehobenen Beschriftungen der einzelnen Mitglieder der Sammlung zurück inputMapVar
. Dazu übergeben wir eine Inline-Funktion als Argument an jeder()
das enthält einfach $ (this) .prev (). removeClass (MISSING);
. Beachten Sie, dass diese
ist das ausgewählte Eingang
Element und prev ()
gibt sein unmittelbares vorheriges Geschwister zurück, welches das ist Etikette
mit ihr verbundenen.Zustand
zur Zustandsauswahl und Was
Bei der Beschreibung der Ansprüche handelt es sich nicht um Textfelder. Daher werden die Stile der entsprechenden Beschriftungen separat zurückgesetzt.Eingang
Elemente, um zu überprüfen, ob einer von ihnen einen fehlenden Wert hat. Wenn dies der Fall ist, fügen wir der mit dem Eingabefeld verknüpften Bezeichnung die fehlende Klasse hinzu: // Formularvalidierung durchführen inputMapVar.each (Funktion (Index) if ($ (this) .val () == null || $ (this) .val () == EMPTY) $ (this) .prev () .addClass (MISSING); err = true;); if (stateVar.val () == NO_STATE) stateLabelVar.addClass (MISSING); err = wahr; if (whatVar.val () == null || whatVar.val () == EMPTY) whatLabelVar.addClass (MISSING); err = wahr;
Übermittlung des Formulars über Ajax
Post
Funktion, die drei Argumente akzeptiert: $ .post ("/ forms / requestProcessor.php", form1Var.serialize (), function (data) …);
serialisieren ()
im jQuery-Objekt, indem Sie die Kennung für unser Formular übergeben.Daten
, vom Server zurückgeschickt.Post
Die Funktion führt einen Ajax-Aufruf aus, der von Natur aus asynchron ist. Gleich nach dem Anruf Post
, Die Programmausführung wird durch die Rückgabe von false fortgesetzt einreichen
Funktion und Benutzer werden den Transition-Inhalt sehen.requestProcessor.php
, gibt eine hart codierte Anspruchs-ID zurück, die der Benutzer zur späteren Verwendung verwenden kann. Vor dem Senden der Anspruchs-ID requestProcessor.php
, Es schläft 4 Sekunden, um die Server-Verarbeitungszeit zu emulieren. In diesem Zeitraum zeigt die Anwendung den Übergangsinhalt an.
Spanne
Tag benannt Bestätigung
mit dem vom Server zurückgegebenen Wert. Dies geschieht einfach mit: ConfirmationVar.text (Daten);
Spanne
Tag benannt Bestätigung
:
Bereitstellen des Quellcodes
Formen
. In diesem Ordner befinden sich zwei Unterordner, css
und img
. Das css
Ordner enthält colors.css
, was hat die label.missing
Klasse und img
Shops wait.gif
, das Spinnerbild. Das index.html
und requestProcessor.php
Dateien sind direkt unter Formen
Mappe. In unseren Tests haben wir einen Apache-Webserver mit Version 2.2.11 verwendet, auf dem PHP Version 5.3.0 ausgeführt wird. Wenn Sie das platzieren Formen
Ordner direkt unter dem Dokument Root
Sie können über den Webserver auf die Anwendung zugreifen http: // [Ihr_Hostname] /folder/index.html.
Fazit