2016-06-23 24 views
1

Ich benutze Iron Router, um Bootstrap modals von ihrer spezifischen URL in einem Meteor-Projekt zu starten, und ich möchte in der Lage sein, die Browser-Schaltflächen zurück und vorwärts zu verwenden um durch sie zu navigieren.Nicht in der Lage, Eisenrouter zum ersten Mal Browser zu arbeiten, wird geklickt

Das Problem:

Eisen Router auf dem ersten Mal nicht den Zurück-Button des Browsers Feuer geklickt wird, nach, dass es gut funktioniert!

Mein Code:

ich vereinfacht den Code ein wenig, aber das ist, wie ich die URL festgelegt, wenn ein modaler öffnet oder schließt (das funktioniert).

Template.main.events({ 

    // modal closed -> URL to "/" 
    'click.dismiss.bs.modal': function() { 
     if(window.location.pathname != "/"){ 
      // error prevention: 
      // click.dismiss.bs.modal also fires when user opens a modal 
      window.history.pushState("", "", "/"); 
     } 
    }, 

    // modal opened -> URL to "/u/username" 
    'click *[data-target="#infoModal"]': function() { 
     window.history.pushState("", "", "/u/" + username); 
    } 

}); 

Das ist mein router.js Code, auch ein bisschen vereinfacht. Die Konsolenprotokolle werden nicht beim ersten Drücken der Zurück-Taste des Browsers zurückgegeben.

Router.route('/u/:username', { 
    name: 'u.show', 
    waitOn: function() { 
     return Meteor.subscribe('users'); 
    }, 
    action: function() { 
     console.log("Iron Router is trying to open #infoModal"); 
     $('#infoModal').modal('show'); 
    } 
}); 

Router.route('/', { 
    name: 'home.show', 
    waitOn: function() { 
     return Meteor.subscribe('users'); 
    }, 
    action: function() { 
     console.log("Iron Router is trying to close all modals"); 
     $('.modal').modal('hide'); 
    } 
}); 

Ich arbeitete nie mit Eisen Router vor, damit ich weiß nicht wirklich, was ich falsch hier tue, ist jede Hilfe sehr geschätzt!

Antwort

0

Ich denke, you need to use Router.go anstatt Browserverlauf selbst zu manipulieren. So kann die Bibliothek für ihre interne Buchhaltung "das Richtige tun".

Template.MyButton.events({ 
    'click #clickme': function() { 
    Router.go('/one'); 
    } 
}); 

Sie sollten auch Ihre Route Check implementieren using iron-router's built in facilities Ihr Leben ein wenig leichter zu machen:

if(Router.current().route.getName() != 'home.show') { 
    Router.go('home.show'); 
} 

diese Weise, wenn Sie jemals die URL ändern (wie die ganze App unter einem subpath setzen), dann diese Code muss auch nicht geändert werden.

+1

Danke! Router.go(); habe mein Problem behoben. Ich sehe auch, warum Ihre Prüfung besser als mein Beispiel ist, aber in der ursprünglichen Anwendung werde ich prüfen, ob das Element, auf das geklickt wird, ein Modal starten wird oder nicht, anstatt die URL zu überprüfen. Ihr Vorschlag basiert wahrscheinlich auf meinem Beispiel. –