0

こんにちは、ルート URL に以下のような :id セグメントを持たせたいと考えています。これは、それに一致するすべてのルートに param として渡される必要があります。

Backbone.history.start({ pushState: false, root: "/orders/:id/items"})

routes: {
    "": "item"
},

item: function(id) {
  alert(id);
}

しかし、ルートURLの一部であっても、現在、IDを未定義として取得しています。

私を助けてください

4

1 に答える 1

1

では、ルート URL にパラメータ セグメントを含めることはできませんBackbone.History

url-fragment を取得してルートを照合し、そこから変数を抽出するために使用されるBackbone.History.getFragmentからのソース コード(少しレイアウトが異なります)

if (!fragment.indexOf(this.options.root)) { 
  fragment = fragment.substr(this.options.root.length);
}

このコードは、すべてのRouter.navigate呼び出しが終了する場所です ({ trigger: false }が適用されない限り)。したがって、フラグメントにstart-function で定義されたルート URL が含まれている場合、フラグメントは元のフラグメントの部分文字列に置き換えられますが、ルートは都合よく省略されます。したがって、変数がフラグメントから取り除かれるとき、ルート URL は考慮されません。

そのため、ルート URL に変数を取得する方法はありません。定義上、アプリケーションがドメインのルート URL から提供されない場合、ルート URL は Backbone.History へのポインタにすぎないためです。ここに引用があります:

アプリケーションがドメインのルート URL / から提供されていない場合は、ルートが実際にどこにあるかを履歴に伝えてください...

したがって、アプリケーションが提供されていない場合は、ルーター/orders/12345/items/orders/78342/itemsそれを伝えようとしないことをお勧めします。代わりに、から提供してから/、ルートを通常どおりに設定します。

routes: {
  'orders/:id/items': 'item'
}

これで問題が解決することを願っています!

于 2012-08-06T13:27:38.283 に答える