7
votes

Bloquer Sammy.js de voler 'Real Links'

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 Sammy.js . 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.

Par exemple, il intercepte Déconnexion .

La partie JS qui achemine est: xxx

je pense this.get ( " La page a couru par knockout.js code est / w / . Je veux que Sammy.js ne fonctionne que dans / w / ou, au moins permettre aux utilisateurs de naviguer à / déconnectez . Comment puis-je accomplir cela?


3 commentaires

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 ('', ...) et met emplacement.href = . 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.


3 Réponses :


1
votes

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 xxx

de sorte que, vous pouvez contrôler en suivant le code de Sammy < / p> xxx


1 commentaires

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!



10
votes

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 réglage: xxx


0 commentaires

0
votes

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();


0 commentaires