Muss ich für jede Seite ein neues Panel erstellen?

8

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?

    
dsdsdsdsd 05.03.2013, 11:25
quelle

11 Antworten

23

Ihre beste Vorgehensweise besteht darin, für jede Seite dynamisch ein Panel zu erstellen.

Ich habe Ihnen ein funktionierendes Beispiel gegeben: Ссылка

%Vor%

Wenige Beschreibungen:

  • $. mobile.activePage wird benötigt, da wir auf jeder Seite dasselbe Panel haben werden und alle dieselbe ID haben werden. Wenn wir es ohne aktive Seite öffnen, öffnen wir sein erstes Auftreten innerhalb des DOM.

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.

    
Gajotres 05.03.2013 12:33
quelle
3

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%     
Jason 13.09.2013 19:46
quelle
2

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.

    
Kevin Teljeur 04.09.2013 14:52
quelle
2

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%     
abracadaniel 10.07.2014 09:23
quelle
0

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.

    
Jay Mayu 05.03.2013 12:10
quelle
0

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

    
user2041042 14.04.2013 08:52
quelle
0

"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.

    
Monte Hayward 16.04.2013 22:30
quelle
0

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.

    
jtblin 16.04.2013 22:43
quelle
0

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

    
quelle
0

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%     
ED-209 28.11.2013 13:51
quelle
0

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%     
blayderunner123 25.10.2014 02:32
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer14553311 ___
  1. das ist kein relativer Pfad, es ist ein absoluter Pfad.
  2. Wenn Sie Windows benutzen, müssen Sie Ihren Laufwerksbuchstaben vor Ihrem Pfad hinzufügen:

%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%     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer14553364 ___

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: Ссылка

    
___ tag123fileinputstream ___ FileInputStream ist eine Java-Klasse, die zum Lesen von Rohdatenströmen gedacht ist. ___ tag123filenotfunddexception ___ Eine Java- oder Android-Ausnahme, die angibt, dass die mit einem angegebenen Pfadname angegebene Datei nicht geöffnet werden konnte. ___ qstntxt ___

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%     
___