Modèle JQuery Mobile qui utilise un panneau latéral. Par souci de simplicité, je souhaite pouvoir charger ce panneau à partir d’un document séparé / d’une page externe, de sorte qu’il puisse être construit une seule fois et utilisé sur de nombreuses pages.
Un peu de recherche m’a amené à obtenir le code suivant pour charger une chaîne de code HTML dans une variable, puis à charger cette variable dans chaque page en tant que panneau latéral:
/* Get the sidebar-panel as a var */ var side_var = 'Panel
stuff
'; /* Load the side-panel var to the DOM / page */ $(document).one('pagebeforecreate', function () { $.mobile.pageContainer.prepend( side_var ); $("#left-panel").panel(); });
Cela fonctionne parfaitement, mais cela n’aborde toujours pas la nécessité de construire la barre latérale / le panneau en tant que fichier html séparé.
Un peu plus de travail et j’ai découvert cet extrait pour charger une page dans une variable:
$.get("http://www.somepage.com", function( side_var ) {}, 'html');
Donc, en théorie, l’ajout des deux devrait donner le résultat souhaité;
/* Get the sidebar-panel as a var */ $.get("mypage.html", function( side_var ) {}, 'html'); /* Load the side-panel var to the DOM / page */ $(document).one('pagebeforecreate', function () { $.mobile.pageContainer.prepend( side_var ); $("#left-panel").panel(); });
Cependant, tout ce que je reçois en exécutant ceci est un chargeur AJAX à rotation éternelle.
Qu’est-ce qui me manque et / ou je fais mal?
SOLUTION COMPLETE
La solution d’Omar ci-dessous va presque tout à fait, mais nécessite un ajout mineur mais important pour que les éléments JQM s’affichent comme prévu. Voici la solution complète:
$(document).one("pagebeforecreate", function () { $.get('side-panel.html', function(data) { //$(data).prependTo($.mobile.pageContainer); //or .prependTo("body"); $.mobile.pageContainer.prepend(data); $("[data-role=panel]").panel().enhanceWithin(); // initialize panel }, "html"); });
Chaque élément à améliorer en tant qu’élément JQM nécessite l’ajout du thème de données pour lui indiquer le thème à utiliser. De plus, dans le .enhanceWithin()
JavaScript, le widget de panneau initialisé doit: .enhanceWithin()
pour que les éléments soient restitués avec le style souhaité.
la fonction $.get()
devrait être pagebeforecreate
dans l’événement pagebeforecreate
, pour append le contenu directement une fois récupéré. En outre, vous devez initialiser le contenu récupéré.
$(document).one("pagebeforecreate", function () { $.get('mypage.html', function(data){ $(data).prependTo("body"); // or .prependTo($.mobile.pageContainer); $("[data-role=panel]").panel(); // initialize panel }, "html"); });