1

我有一个使用 Rails 作为服务器的 EmberJS 应用程序。在我的 Javascript 代码中,我有一些变量会根据应用程序所在的环境而变化。例如,如果应用程序在开发环境中,我希望 JS 代码向 localhost:3000 发送 POST 请求,如果是在暂存中,我希望它转到 staging.domain.com,如果它在生产中,它应该转到 domain.com。与其在更改环境之前手动更改所有常量变量,不如在 JS 文件中设置因环境而异的常量的最佳方法是什么?我需要这个的原因是因为 ember 应用程序正在与外部服务器进行通信以获取其 POST 请求。

4

1 回答 1

1

由于我猜您正在使用 rails 提供文件(包括您的 ember 应用程序 js 文件),因此您可以实现此目的的一种方法是简单地将 rails env 变量注入这些文件,例如通过在 index.html 中执行类似的操作:

index.html.erb

...
<%= javascript_tag do %>
  window._current_host = "<%= Rails.env['SERVER_NAME'] %>"
<% end %>
...

这样做之后,您可以window._current_host在 javascript 代码中根据需要使用该全局变量:

应用程序.js

...
App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    var url = window._current_host + '/somepath/...';
    return Ember.$.getJSON(url, function(data) {
      return data;
    });
  }
});
...

甚至:

DS.RESTAdapter.reopen({
  host: window._current_host
});

以上只是伪代码,当然还有更多的方法可以做到这一点,但我想你明白了。

希望能帮助到你。

于 2013-10-11T08:55:29.417 回答