バックボーンアプリケーションには、投稿のプレビューを表示するメインビューがあります。ユーザーが投稿をクリックすると、投稿がオーバーレイで展開され、その投稿を反映するようにURLが変更されます。投稿が展開されている間、ユーザーはルートコンテキストで発生する必要があるサーバーへの呼び出しをトリガーする何かを行う可能性があります。問題は、投稿が展開されると、ルートコンテキストで発生する必要のあるサーバー呼び出しが、代わりに投稿コンテキストから発生することです。操作の順序は次のとおりです。
- ページにはメインビューのURLが読み込まれます:http:// localhost:8080 / my-web-app /
- ユーザーが投稿をクリックすると、オーバーレイが表示され、URLが次のように更新されます:http:// localhost:8080 / my-web-app / posts / 1
- ユーザーがサーバーへの呼び出しをトリガーするものをクリックします。URLは次のとおりです:http:// localhost:8080 / my-web-app / posts / 1 / load、これは間違っています。
上記の例では、ロード操作はルートコンテキストから発生する必要があります:http:// localhost:8080 / my-web-app / load
モデルやコレクションなどのurlプロパティを変更して先頭の/を含めようとしましたが、これにより「/ my-web-app /」コンテキストが削除されます(urlはhttp:// localhost:8080 / loadになります) 、これは私のテスト環境で必要です。もちろん、これは実稼働環境では問題なく機能します。
これを回避するために、Backbone.historyルートオプションを「/ my-web-app /」に設定し、すべてのurlプロパティを次のようにオーバーライドしました。
url: function() {
(Backbone.history.options.root != undefined ? Backbone.history.options.root : "") + "load";
}
このアプローチは機能しますが、このようなすべてのURL関数をオーバーライドするのはお尻の痛みです...言うまでもなく、それはハッキーな感じがします。また、実稼働環境ではまったく不要なコードです。テスト環境と本番環境の両方で機能するように、これを管理するためのより洗練された方法はありますか?
ありがとう!