0

バックボーンアプリケーションには、投稿のプレビューを表示するメインビューがあります。ユーザーが投稿をクリックすると、投稿がオーバーレイで展開され、その投稿を反映するようにURLが変更されます。投稿が展開されている間、ユーザーはルートコンテキストで発生する必要があるサーバーへの呼び出しをトリガーする何かを行う可能性があります。問題は、投稿が展開されると、ルートコンテキストで発生する必要のあるサーバー呼び出しが、代わりに投稿コンテキストから発生することです。操作の順序は次のとおりです。

  1. ページにはメインビューのURLが読み込まれます:http:// localhost:8080 / my-web-app /
  2. ユーザーが投稿をクリックすると、オーバーレイが表示され、URLが次のように更新されます:http:// localhost:8080 / my-web-app / posts / 1
  3. ユーザーがサーバーへの呼び出しをトリガーするものをクリックします。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関数をオーバーライドするのはお尻の痛みです...言うまでもなく、それはハッキーな感じがします。また、実稼働環境ではまったく不要なコードです。テスト環境と本番環境の両方で機能するように、これを管理するためのより洗練された方法はありますか?

ありがとう!

4

2 に答える 2

1

アプリケーション ルーティングは、開発環境と本番環境で異なるべきではありません。これは常にある時点で問題を引き起こします。

ローカルホストで Apache サーバーを使用していると仮定すると、選択した仮想ホストを作成/my-web-app/して、/.

まず、ドメイン名を /etc/hosts ファイルに追加し、次のように 127.0.0.1 をポイントします。

127.0.0.1   mywebapphost

次に、仮想ホストをApacheに追加しますvhosts.conf

<VirtualHost *:80>
    DocumentRoot "/Users/someone/Sites/my-web-app/" # absolute directory of your webapp
    ServerName mywebapphost
</VirtualHost>

そして、あなたは完了です!Web アプリケーションは //mywebapphost:8080 で利用でき、すべてのルーティングは本番環境と同じです。

于 2012-06-28T22:00:10.323 に答える
0

私は問題を抱えていて、しばらく強調した後、* をルートのプレフィックスとして使用して、Web コンテキストの問題を解消できることに気付きました。

*posts/1/load

唯一の欠点は、ルート解決がより多くの作業を行う必要があることですが、それがクライアント側であることを考えると、無視できるはずです。

あなたのルートがdev、qaプロダクションの間で異なってはならないのは本当かもしれませんが、多くのWebアプリケーションはコンテキストにとらわれないように書かれているので、クライアント側のものは私見に従わなければならないと言っても過言ではありません.

于 2012-07-12T21:30:23.433 に答える