サードパーティのサイトでホストされるウィジェットを作成しようとしています。依存する外部ファイルの一部は、さまざまな環境のさまざまなソースからプルする必要があります。つまり、開発では、ローカルホストからいくつかのファイルをプルする必要があり、ステージングでは、staging-domain.comからプルする必要があり、本番環境では、 www.xyz.comからそれらをプルする必要があります
私のハックソリューションは次のとおりです-
でapplication.coffee
:
prodApiHost = 'http://productionhost.com/api'
@APIHost = do ->
if ( window.location.port.match(/^3/) || window.location.host.match(/^(localhost)/i) || window.location.host.match(/xyz.staging/i ))
if window.location.host.match(/^(localhost)/i) || window.location.port.match(/^3/)
window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/api'
else
window.location.protocol + '//' + window.location.host + '/api'
else
prodApiHost
次に、そのURLを使用する必要があるモデルでは、次のようにします。
でmy_model.coffee
:
some_attribute: namespacedApp.APIHost
もっと良い方法があると確信しています...どんなポインタ/ヘルプも大歓迎です!
編集
私はこれを行う別の方法を見つけました。私は次のように同じAPIHost
関数をinitialize.coffee
ファイルに入れることができます:
application = require 'application'
application.prodApiHost = 'http://productionhost.com/api'
$ ->
application.APIHost = do ->
if ( window.location.port.match(/^3/) || window.location.host.match(/^(localhost)/i) || window.location.host.match(/xyz.staging/i ))
if window.location.host.match(/^(localhost)/i) || window.location.port.match(/^3/)
window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/api'
else
window.location.protocol + '//' + window.location.host + '/api'
else
application.prodApiHost
application.initialize()
Backbone.history.start()
これで、fnはアプリのどこでも利用できます。これが最善の解決策かどうかはまだわかりません。他に何か提案はありますか?