为每个Ember环境保留带有多个适配器的固定装置



尽管按照自然的进展,将用另一个适配器替换fixture适配器,但我希望保留用于开发环境的fixture,同时利用不同的Ember数据适配器用于生产。

这是因为:

  • 渐进增强的重迭代
  • 旨在从iOS应用中嵌入到UIWebView中运行,生产配置与桥接调用本地程序集来获取数据紧密耦合。

Ember CLI资产编译是基于西兰花加载Web或本机API:

app.import({
    development: 'vendor/company/WebAPI.js',
    production: 'vendor/company/NativeAPI.js'
});

但是,我不确定如何利用此模式来更改适配器。

开发环境

对于开发,我想使用模拟数据或http服务来启用浏览器中的测试。

因此,在开发环境中启动Ember服务器需要使用fixture。

ember server --environment=development

这个配置将扩展FixtureAdapter用于开发:

var ApplicationAdapter = DS.FixtureAdapter.extend({
    /* ... */
});
export default ApplicationAdapter;
生产环境

然而,复杂性是需要不同适配器的生产环境。

当在生产环境中启动Ember服务器时,服务通过一个桥接://方案提供,其中原生iOS应用管理传输层和数据模型。

ember server --environment=production

此配置将为生产扩展基本适配器:

var ApplicationAdapter = DS.Adapter.extend({
    /* ... */
});
export default ApplicationAdapter;

如何在一个Ember应用中使用多个适配器?适配器是如何在App中交换的,或者路由中的store会定义一个不同的适配器?

您可以提供一个全局应用程序适配器,它将了解您的环境,并根据当前环境导出最适合的适配器(如果需要,序列化器也是如此):

+-- app
|   |-- adapters
|   |   `-- application.js
|   |   `-- custom-adapter.js
|   |-- ...
|   | 
|   |-- serializers
|       `-- application.js
|       `-- custom-serializer.js

application.js:

import DS from 'ember-data';
import config from '../config/environment';
import CustomAdapter from './custom-adapter';
var adapter = DS.FixtureAdapter.extend({});
if (config.environment === 'production') {
    adapter = CustomAdapter;
}
export default adapter;

custom-adapter.js :

import Ember from 'ember';
import DS from 'ember-data';
var adapter = DS.RESTAdapter.extend({
    // your custom RESTAdapter
});
export default adapter;

希望对大家有所帮助

最新更新