2

バックボーン ルーターが定義されたルートをリッスンするのを終了または停止することは可能ですか?

Backbone SubRoute ( https://github.com/ModelN/backbone.subroute ) をテストし、ユーザーが多くのサブアプリケーションを実行できる多くのスペースを持つアプリケーションをセットアップしているため、質問します。

そのため、大まかに次のようなメイン ルーター、サブルーター構造を定義しました。

   MainRouter = Backbone.Router.extend
    routes:
      "":"root"
      "spaces/:id/:module(/*subroute)":"invokeModule"

    root: () ->
      console.log "root trigger"

    invokeModule: (id, module, subroute) ->
      that = this
      GigaApp.module(module).start({nested_root: "spaces/#{id}/#{module}"})

  SubAppRouter = Backbone.SubRoute.extend
    routes:
      "":"app_home"

    app_home: () ->
      console.log 'at sub app home'

  SubApp.on "start", (options) ->
    SubApp.router = new SubAppRouter(options.nested_root)

この一般的な構造は、サブ アプリケーションが最初にスペースに対して初期化されたときから機能します。これは、MainRouter が SubApp を開始し、正しいネストされたルートでルーターを初期化するためです。その後、SubAppRouter で定義された他のルートも正常にトリガーされます。

ただし、(ID が異なる) 別のスペースに移動し、最初のスペースに戻ると、そのスペース用に既に初期化されている SubAppRouter が MainRouter をオーバーライドし、MainRouter から SubApp の開始の呼び出しが行われないため、この構造が壊れます。 .

したがって、バックボーン ルーターのルート トリガーを停止またはアンバインドする方法があるかどうか疑問に思っています。

4

2 に答える 2

2

現時点では、答えはNOです

Derick Bailey は、Backbone のリポジトリでこの問題を開き、そのような変更をサポートするためにバックボーンの構造にいくつかの変更を提案しました: https://github.com/jashkenas/backbone/pull/1630

このような変更のメリットについての議論が続き、次の点が指摘されました。

はじめに -- 残念ながら、ここでの前提が理解できていません。このパッチと矛盾するルーティングの公理がいくつかあります。

ルーターは、URL をアプリケーション内の場所に一致させるために存在します。

URL の要点は、いつでもアクセスできることです。一度 URL を取得すると、いつでもその URL に戻ることができます (ブックマークして、ブラウザーに貼り付けます)。

Backbone のソース コードも調べましたが、私が考えている機能が実現可能であるという兆候はありません。

于 2013-09-24T08:41:23.913 に答える