我正在尝试构建一个将托管在 3rd 方网站上的小部件。它所依赖的一些外部文件需要从不同环境中的不同来源中提取,即在开发中,它应该从 localhost 中提取一些文件,在登台时应该从 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 在应用程序中随处可用。仍然不确定这是最好的解决方案。还有其他建议吗?