あなたのケースを再現するjsfiddleを提供していただけますか?あなたは通常それを行うことができるからです(私は個人的に、ルーターをインスタンス化し、履歴を開始し、他のいくつかをインスタンス化するアプリを持っていますが、それは完全に正常に動作します。)
それまでは、ルーターに関する情報をいくつか示します。
- ルーターをインスタンス化すると、ルートは Backbone.history (1 つの一意のオブジェクト) にバインドされます。これは、両方のルーターがコールバックを実行する
こと
を期待できないことを意味します。
固定された順序があることを意味します: 最後にインスタンス化されたルーターのルートが最初にチェックされます
編集:
OK、誰かが直接 tab1/stuff にアクセスすることを期待しているので、両方のルートを実行したいと思います。
醜い方法: Backbone.history (Backbone.history.stop()) を停止し、その後すぐに開始できます。router2 のルートはバインドされます...
他の可能性: すべてのルートをメイン ルーターに配置しないのはなぜですか? 本当に多すぎる場合は理解できると思います。
最後の可能性(私が考えることができる):最後のルーターのルートが最初にテストされるという事実を使用してください。それが必要なことです。メイン ルーターのルートを変更し、必要なものをキャッチする一般的なルートを追加します (たとえば、tab1)。何もせずに、/tab1 に戻ります。次のように、2 つのナビゲートを準備します。
this.navigate('/tab1', {trigger: true});
this.once('someEvent', function() {
this.navigate('/tab1/stuff', {trigger: true});
});
十分な一般的な URL がある場合は、tab1 & を一般的なルートに一致する引数に置き換えることができます。
編集 2:
最後のコメントで書いたすべての内容と、ビュー/アクションのようなハッシュタグ (または URL) を使用してバックボーン ビューにアクセスすることを前提とした編集です。できる限り詳しく説明するように努めます (問題の詳細をまだすべて把握していないため)。
この jsfiddleは原則を示しています。現在、クライアントの履歴を台無しにするという事実がまだあります (バックボーンでそれを回避する方法があるかもしれません。問題がある場合は、それを調べる必要があります)。
さて、他にもいくつかの問題があるかもしれないという事実。それらの最小のものは、セカンダリルーターのボイラープレートである可能性があります (ルートの前にview/を配置する必要があります)。それに対する解決策はありますが、それは深すぎるでしょう。より大きなものは次のとおり
です。すでに述べましたが、一致するルートは 1 つだけです。したがって、クライアントがビューを変更するという事実に対処するためにメインルーターを使用することはできません(たとえば、view1/action1からview2/action2に移動し、 router2 は以前にロードされています)。action2 は実行されますが、メイン ルーターでビューをリロードした場合は実行されません。
最後のコメントとして、メイン ルーターを作成した後にルーター コアの初期化メソッドを変更して定型的な動作を追加できます (ビューをリロードしますか? )。