2

1 つのページでさまざまなオプションをクリックするクライアントを処理するために、バックボーン ルーターを使用しています。とりわけ、このルーターは、単純な同じページのアンカー タグ リンクと同様に動作します。

私が抱えている問題は、ユーザーがオプションの 1 つ (「詳細」など) をクリックしてからスクロールすると、「詳細」をもう一度クリックしたくなる可能性があることです。その場合、何も起こりません。アプリは既に詳細にルーティングされており、再ルーティングされません。などの単純なリンクを使用するだけ<a href="#details">Details</a>ですが、ページをジャンプするだけではありません。再ルーティングを強制的に発生させる方法はありますか?

4

3 に答える 3

4

アレクセイの答えから構築すると、リロードをトリガーするかのように、バックボーンの履歴/ルーターに現在の URL を強制的に「再ルーティング」させることができます。

への典型的な呼び出しが失敗したかどうか、または既に同じ URL にあるために何も返さないかどうかを実際に検出し、それらの場合にそれを強制するために呼び出すことができます。navigateloadUrl

たとえば、サイト全体の内部リンク ハンドラーは次のようになります。

// `Backbone.history.navigate` is sufficient for all Routers and will
// trigger the correct events. The Router's internal `navigate` method
// calls this anyways.
var ret = Backbone.history.navigate(href, true);

// Typically Backbone's history/router will do nothing when trying to load the same URL.
// In some cases (links with .allow-reload), we want it to re-fire the same route.
// We can detect when Backbone.history.navigate did nothing, and force the route.
if (ret === undefined && $link.hasClass('allow-reload')) {
    Backbone.history.loadUrl(href);
}
于 2014-09-11T01:05:16.833 に答える
2

常に を返します。強制するパラメータはありません。現在解決策を探していますが、現在のルートを静かに新しいルートに置き換えてから、古いルートに移動しようとしています。

UPD: 実際には、Backbone.history.loadUrlを使用できます

于 2014-04-08T14:47:22.950 に答える
-1

ビューでクリック イベントをバインドすると、ルートを手動で起動できます。

View.js

SearchView = Backbone.View.extend({
  initialize: function(options){
    alert("Alerts suck.");
    this.router = options.router;
  },
  events : {
    "click a.detail_link" : "showDetails"
  },
  showDetails : function(){
    this.router.navigate("/#details", true);
  }
});
于 2012-07-13T18:01:51.577 に答える