J'ai récemment commencé à utiliser knockout.js et Sammy.js pour moderniser mon application. Cependant, j'ai été coincé avec des problèmes.
J'ai des liens valides sur la page - Les utilisateurs doivent réellement naviguer à cet emplacement, au lieu d'imiter les comportements de navigation utilisant Par exemple, il intercepte La partie JS qui achemine est: p> je pense Sammy.js code>. Je veux que seuls les liens de hachage soient acheminés par Sammy.js, mais il intercepte également des liens qui ne contiennent aucun hashhes. P>
Déconnexion code>. p>
this.get ( " La page a couru par knockout.js code est
/ w / code>. Je veux que Sammy.js ne fonctionne que dans
/ w / code> ou, au moins permettre aux utilisateurs de naviguer à
/ déconnectez code>. Comment puis-je accomplir cela? P> p>
3 Réponses :
Vous pouvez utiliser la fonction "autour". Il y a beaucoup d'options. Je suggère de faire comme suit,
laissez comme suit des URL. En frappant cette URL, vous souhaitez communiquer le serveur à la page. Par exemple, l'URL de la déconnexion comme "/logout".<
lo.p-now Faites de cette URL comme suit P> de sorte que, vous pouvez contrôler en suivant le code de Sammy < / p>
Vous avez oublié d'appeler le rappel, alors rien ne se passerait du tout s'il n'y avait pas de recharge. J'étais tellement libre de modifier votre réponse. Maintenant, cela fonctionne comme annoncé! Merci!
J'ai été un moment depuis que j'ai utilisé Sammy, mais je pense que vous pouvez désactiver ce comportement avec le désactiver_push_state code>
réglage:
J'ai trouvé que si je comparais la fenêtre.Location à la copie d'une copie de la fenêtre stockée au démarrage, je peux échapper en toute sécurité au piège Sammy. Si les URL de base correspondent, j'exécute la route de base. S'ils ne correspondent pas, je rechargez la fenêtre.Location et déchargez Sammy.js.
function myUrl() { var url= window.location.href; if (window.location.hash) { url= url.replace(window.location.hash, ""); } if (window.location.search) { url= url.replace(window.location.search, ""); } return url; } ... Sammy(function () { var myLocation = myUrl(); ... this.get('', function () { if (myLocation === myUrl()) { this.app.runRoute('get', '#/'); } else { window.location.reload(true); this.unload(); } }); }).run();
Avez-vous déjà résolu cela? Sinon, je vous recommanderais certainement de reproduire ceci sur jsfiddle .
@edhedges Je pense que cela consiste à définir des points d'entrée de votre application Web. Mon application est une application multicapeutique traditionnelle qui contient des HTML générées à partir d'un serveur Web Python (et des titres Sammy.Js et Hash + Ajax dans une certaine mesure). Donc, ma solution à ceci était supprimer
this.get ('', ...) code> et met
emplacement.href = code>. Maintenant, les URL non hachauffées ne sont pas interceptées.
Vous devez répondre à la question vous-même pour les autres si vous l'avez résolu.