0

バックボーンルーターを期待どおりに動作させることができないようです。I i)ルーターをインスタンス化してから、ii)Backbone.history.start({pushState:true、root:'/'})を呼び出します。以下のコードで...

  • 1)「/dashboard」または「/grid」に移動すると、定義された関数は呼び出されません
  • 2)myrouter.navigate( "grid")を呼び出すと、定義された関数が呼び出されません
  • **)ただし、履歴を前後に移動すると、定義された関数が呼び出されます。
    Router : Backbone.Router.extend

        routes:
          "dashboard":                  "dashboard"
          "grid/:storyid":              "grid"

        dashboard: ->
          console.log("...")

        grid: (storyid) ->
          console.log("...")

ケース1)と2)を機能させるには、何をする必要がありますか?

ありがとう

4

1 に答える 1

1

ルーターは想定どおりに機能しています。それがどのように機能するか、そしてその理由についてのあなたの期待は外れていると思います。

1) 「/dashboard」または「/grid」に移動すると、定義された関数が呼び出されません

ブラウザの URL バーに「/dashboard」または「/grid」と入力すると、ブラウザはサーバーにその URL を取得するよう要求します。これは、ブラウザーが要求をサーバーに戻すため、ルーターをバイパスします。

ブラウザの URL 入力に URL を入力してもサーバーから新しいページが要求されないのは、ハッシュ フラグメント「#whatever」のみを変更する場合のみです。

myrouter.navigate("grid") を呼び出すと、定義された関数が呼び出されません

のデフォルトの動作はrouter.navigate、適切なルートで URL を更新することですが、そのルートはルーターによって処理されません。まさにあなたが説明していることです。

ブラウザーにルートの変更を強制的に処理させたい場合はtrue、2 番目の引数として渡します。myrouter.navigate("grid", true)

**) ただし、履歴をさかのぼったり進めたりすると、定義された関数が呼び出されます。

これが機能するのは、ルーターがブラウザーの履歴 API を使用して自身を登録しており、ブラウザーが要求された URL を取得するためにサーバーに戻る前に、進む/戻るボタンによって引き起こされる URL の変更を処理する機会が与えられているためです。

于 2012-11-19T20:19:53.973 に答える