Gev*_*ous 4 ember.js ember-data
我有一个像这样的适配器:
var Adapter = DS.RESTAdapter.extend({
host: 'http://localhost:4200'
});
if (config.environment === 'production') {
Adapter.reopen({
host: 'http://foo.example.com'
});
}
Run Code Online (Sandbox Code Playgroud)
这已经有一段时间了,但最近出现了问题.我的ember应用程序与许多不同的子域(例如foo.example.com和bar.example.com)接口.我的理解是reopen改变所有实例,这就是我认为发生的事情.当我浏览到'/ bar'时,它在生产中使用正确的适配器,但浏览到'/ foo'仍然使用bar.example.com端点.
我的问题是双重的.首先,我在这里使用正确的方法吗?
其次,我想根据运行时设置更改适配器.我需要解决IE8缺乏CORS支持所以我认为如果我有一个ie8开关,适配器应该打example.com/foo而不是foo.example.com.在我看来,这两个领域在概念上是相关的,但我很高兴出错.
更新
为简化起见,我基本上想找到请求的主机名并将其传递给适配器.例如,如果我浏览到www.example.com我希望适配器从中获取记录www.example.com/foo,或者在浏览时www.example2.com我希望适配器从中获取记录www.example2.com/foo.我希望这是有道理的.这甚至可能吗?
我对此并不是百分之百确定,但我的猜测是该值正在被缓存.我的建议是制作host一个易变的计算属性.这对您来说实际上更好,因为这将允许您根据运行时配置更好地选择主机.尝试这样的事情:
var Adapter = DS.RESTAdapter.extend({
host: function() {
if (config.environment === 'production') {
return 'http://foo.example.com';
} else {
return 'http://localhost:4200';
}
}.property().volatile()
});
Run Code Online (Sandbox Code Playgroud)
因为Ember-Data总是使用Ember的get方法来获取属性,所以host从普通属性变为计算属性应该没有区别.因此,您可以在运行时选择主机,并确保每次都计算它.(不要担心不缓存该值的性能,我保证不会产生明显的差异.)
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |