Ich möchte für meine Choose Language-Komponente ein Panel in einer jqm-Site verwenden. Diese Komponente muss also auf jeder Seite vorhanden sein. Hier ist das Setup für ein Single-Page-Panel.
von jquerymobile.com (... habe ich eine Kopfzeile hinzugefügt)
%Vor%Ich habe festgestellt, dass ich 3 Lösungen habe:
A - Erstellen Sie eine Kopie des Panels auf jeder Seite ---- Dies wird ein Problem sein, wenn sich der Zustand auf page_N ändert, dann müssen alle anderen synshronisiert werden
B - Erstellen Sie ein einzelnes Feld, das bei Seitenänderungen pro grammatisch verschoben wird ---- Das scheint wie ein Hack
C - entdecken Sie, ob jqm bereits eine Lösung für dieses Problem hat - Also stelle ich die Frage:)
Hat jqm eine Möglichkeit, ein Panel von Seite zu Seite zu verschieben?
Ihre beste Vorgehensweise besteht darin, für jede Seite dynamisch ein Panel zu erstellen.
Ich habe Ihnen ein funktionierendes Beispiel gegeben: Ссылка
%Vor%Wenige Beschreibungen:
jQuery Mobile-Entwickler haben erklärt, dass das Panel-Widget in der nächsten Hauptversion nicht mehr Teil einer Seite sein muss, sondern auf derselben Ebene wie ein Seiten-div platziert wird. So wird ein Panel ne benötigt. Leider müssen Sie es dynamisch erstellen.
Hier ist die Lösung, die ich mir ausgedacht habe. Ich speichere den Panel-Inhalt in einem versteckten div und verschiebe die jquery mobile Initialisierung. Wenn das Dokument geladen wird, füge ich den Inhalt der Anzeige an jedes Seitenelement (jqm) an und initialisiere dann jqm. Der einzige Leistungseinbruch tritt auf, wenn die Seite zuerst geladen wird.
HTML:
%Vor%Skript:
%Vor%Ich habe selbst damit gerungen, und hier ist die Lösung, die ich verwende:
%Vor%Der Trick scheint zu sein, .remove () anstelle von .detach () zu verwenden, um das Panel, das Sie verschieben möchten, aufzuheben - ohne gespeicherte jQuery-Objekte -, so dass jQuery Mobile keine Annahmen über das Markup trifft. Es fällt mir auch auf, dass diese Lösung einen beträchtlichen Overhead aus der DOM-Manipulation hinzufügt. Es ist nicht ideal, aber es funktioniert.
BEARBEITEN: Beachten Sie, dass es so eingestellt ist, dass es für jede Seite funktioniert und beim Laden der ersten Seite ausgelöst wird, wo Sie vermutlich das Startmenü haben und wo es kein vorheriges Seitenobjekt gibt. Aber du könntest das Menü wahrscheinlich anderswo aufbewahren und es dort auch als Fallback suchen.
mit der Inspiration von Gajotres und der Art und Weise, wie AppFramework die Panels bearbeitet, die ich gemacht habe. Es funktioniert, indem Sie definierte Panels auf die aktive Seite kopieren, die Panels werden durch ID in den rechten und linken Panel-Attributen für die Seite div definiert:
%Vor%Erstellen Sie eine Seite wie folgt:
%Vor%und platziere die Panels irgendwo außerhalb einer Seite und verstecke sie wie folgt:
%Vor%Panel ist ein neues Konzept, das in 1.3 eingeführt wurde. Also lasst uns hoffen, dass bald weitere Tutorials auftauchen werden. Was Ihr Problem betrifft, schätze ich, dass Sie besser ein Panel auf jeder Ihrer Seiten kodieren. Sie können Änderungen an Ihrer Seite in Echtzeit vornehmen, aber rufen Sie die folgende Methode auf, wie in der Dokumentation dokumentiert.
%Vor%Ich bin mir nicht sicher, ob andere Wege möglich wären.
Ich hatte das gleiche Problem und beendete die Verwendung von iframe , um den persistenten Inhalt (in meinem Fall ein ausgeklügeltes Suchformular) aus einer Datei zu laden:
%Vor%sform.html sendet eine Nachricht an die Hauptseite, wenn der Benutzer ein Suchkriterium wie folgt einreicht:
%Vor%und die Hauptseite fängt es so ein:
%Vor%Ich weiß, es ist komisch, aber es funktioniert
"Ein Panel kann nicht außerhalb einer Seite platziert werden, aber diese Einschränkung wird in einer zukünftigen Version entfernt." (Von Zypern )
Diese Fähigkeit scheint der Schlüssel zu sein, um das Panel als App-Navigationsgerät am nützlichsten und bequemsten zu machen.
Für Panel und Kopf- und Fußzeile erstelle ich eine Vorlage (ich verwende dustjs ) für jedes Element. Im Ereignis pagebeforecreate
füge ich den HTML-Code an die aktuelle Seite an. Sie müssen pagebeforecreate
event verwenden, wenn JQM den HTML-Code "verbessern" soll. Wenn Sie sich nicht darum kümmern, können Sie das Ereignis 'pagecreate' verwenden.
Ich hatte dieses Problem, während ich eine einzelne Seitenvorlage verwendet habe. Ich möchte nur ein Div mit ID-Menü haben und es an alle Seiten der einzelnen Seite Vorlage anhängen.
Der Code meines Menübereichs sieht folgendermaßen aus:
%Vor%Und mein JS-Code ist:
%Vor%});
Dieser Code funktioniert perfekt und ich bin glücklich, die richtige Antwort auf mein Problem gefunden zu haben, nach dem ich zwei oder mehr Stunden gesucht habe.
Kommentar falls gearbeitet. Grüße aus Spanien
Mein Ansatz ist ähnlich wie bei anderen Antworten hier, aber ausreichend unterschiedlich, um einen Beitrag zu rechtfertigen.
In meinem mehrseitigen Projekt baue ich mein Navigations-Panel wie folgt auf der ersten Seite:
%Vor%Und dann füge ich auf den folgenden Seiten ein div mit einem geeigneten Klassennamen hinzu, um es zu identifizieren:
%Vor%Und dann auf dem pagebeforecreate Ereignis der ersten Seite der App klonen ich das Navigationsfeld und ersetze alle untergeordneten Container damit:
%Vor%In Jquery 1.4.4 können Sie einfach Folgendes verwenden:
%Vor%Dies funktioniert in meinem mobilen Webprojekt für den Unterricht und mein Lehrer für mobile Webanwendungen hat uns das heute gezeigt.
Sehen Sie es unter Jquery Mobile Web-Anwendung
Der Rest des Seitencodes ist:
%Vor%Tags und Links javascript jquery html5 css3 jquery-mobile
%code%
Windows unterstützt das Symbol% co_de% nicht als "root"
Wenn Sie eine Datei laden möchten, die Sie in Ihr JAR legen, müssen Sie
verwenden %Vor%oder
%Vor%Die anderen Poster sind richtig. Der Pfad, den Sie geben, ist kein relativer Pfad. Sie könnten möglicherweise etwas wie %code% tun. Dadurch können Sie eine Datei basierend auf einem Pfad relativ zu der Klasse, von der Sie sie aufrufen, als Stream laden.
Weitere Informationen finden Sie in der Java-API: Ссылка
Ich habe versucht, ein Objekt von %code% zu erstellen und den relativen Wert einer Datei an seinen Konstruktor zu übergeben, aber es funktioniert nicht richtig und warf ein %code%
%Vor%