J'essaye de créer un site Web de SPA avec JQuery. Je sais comment utiliser history.pushState
et $(window).on('popstate')
mais j'ai quelques questions. Actuellement, j'ai un fichier router.js qui gère l'événement popstate et les liens de navigation. Je place les liens dans un attribut personnalisé (data-navId = "templates/page/page.html") ou dans href et le gère avec $(e).preventDefault();
. L'utilisateur clique sur le lien et $('.page-content').load('url', function() {})
et history.pushstate
sont exécutés.Comprendre l'implémentation de JQuery SPA
1) Suis-je obligé d'inclure le fichier router.js contenant ces fonctions dans chaque modèle? Je veux un html qui contient ces fonctions seulement. Les modèles ne doivent contenir que du code HTML et leurs scripts correspondants . J'ai réussi à accomplir cela, mais si l'utilisateur actualise la page le modèle affiche sans style ou quoi que ce soit. Est- en utilisant un hachage la réponse? Ou si l'utilisateur ferme le navigateur et a l'option "Restaurer les pages précédentes" activée le modèle sera charger avec son code html seulement.
Dans le passé, j'ai développé des pages SPA sans hachage en utilisant seulement popstate
et history.pushState
mais je dû inclure tous les fichiers HTML sur chaque fichier, puis en appelant $('.page-content').load(url + ' .page-content > *', function() {});
pour éviter le bug de rafraîchissement.
Je sais aussi que Facebook utilise popstate
pour les navigateurs modernes et hashchange
pour les plus anciens en incluant peut-être Modernizr.js ou une bibliothèque personnalisée. Mais comment le routeur fonctionne sans l'inclure dans chaque modèle?
Merci d'avance.