2016-06-23 4 views
1

Iron Routerを使用して、Meteorプロジェクトの特定のURLからBootstrapモーダルを起動しています。ブラウザの戻るボタンと進むボタンを使用できますそれらをナビゲートする。初めてアイアンルーターを起動することができません

問題:

それが正常に動作し、その後アイアンルーターは、ブラウザの戻るボタンがクリックされる最初の時間に発生しません!

マイコード:

私は、コードを少し簡略化されますが、これは、モーダルの開閉(これが機能する)ときに私はURLを設定する方法です。

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

}); 

これは私のrouter.jsコードであり、これも少し簡略化されています。コンソールのログは、ブラウザの戻るボタンが押されたときに初めて返されます。

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'); 
    } 
}); 

私は前ので、私は本当に私がここで間違ってやっている、すべてのヘルプははるかに高く評価されるのか分からない鉄のルータで働いたことはありません!

答えて

0

私は自分でブラウザの履歴を操作するのではなく、you need to use Router.goだと思います。そうすれば、図書館は内部簿記のために "正しいことをする"ことができます。

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

その方法をあなたが(サブパスの下で全体のアプリを置くように)URLを変更した場合、この:あなたはまた、あなたの人生を少し楽にするために、あなたのルートをチェックusing iron-router's built in facilitiesを実装する必要があります

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

コードを変更する必要もありません。

+1

ありがとうございます! Router.go();私の問題は解決しました。私はあなたのチェックが私の例よりも優れている理由も理解していますが、元のアプリケーションでは、クリックされた要素がURLをチェックするのではなく、モーダルを起動するかどうかをチェックします。あなたの提案はおそらく私の例に基づいてベストプラクティスです。 –

関連する問題