1、概述html
1. 在Ember Data中,和后台数据存储通讯的逻辑存在于Adapter中。Ember Data的有一些内置的假设,一个 REST API 应该怎么看。若是你的后台约定和这些假设不一样,Ember Data经过交换或扩展默认的适配器很容易改变它的功能。git
2. 自定义适配器的一些缘由包括在你的urls中使用underscores_case,使用一个介质而不是REST去和你的后台API甚至使用一个local backend。github
3.在Ember Data中扩展适配器是一个天然的过程。Ember认为,你应该扩展一个适配器来增长不一样的功能而不是增长一个标记。这使得代码的可测试性更好,更加容易理解而且为那些想要子类化你的适配器的人减小了膨胀。json
4. 若是你的后台有一些一致的规则,你能够定义一个adapter:application。这个adapter:application将比默认的适配器得到优先权,然而仍然会被特定的模型适配器取代。api
app/adapters/application.js服务器
export default DS.RESTAdapter.extend({ // Application specific overrides go here });
5. 若是你有一个model对于和它的后台通讯有例外的规则,你能够建立一个特定的模型适配器,经过运行命令ember generate adapter adapter-name。例如,运行ember generate adapter post将会建立下面的文件:app
app/adapters/post.js
ide
export default DS.RESTAdapter.extend({ namespace: 'api/v1' });
6. 默认状况下,Ember Data伴随几个内置的适配器。为建立你本身的自定义适配器,使用这些适配器做为开始。post
2、Customizing the restadapter测试
这个 DS.RESTAdapter是最多见的扩展适配器。它有几个hooks,它们一般被用于扩展它和非标准的后台一块儿工做。
1. Endpoint Path Customization
namespace属性能够被用于使用一个指定的url命名空间给请求加前缀:
app/adapters/application.js
export default DS.RESTAdapter.extend({ namespace: 'api/1' });
请求person如今将会导航到http://emberjs.com/api/1/people/1。
2. Host Customization
默认的适配器将会导航到当前的域。若是你想指定一个新的域,你能够这样作,在适配器中设定host属性。
app/adapters/application.js
export default DS.RESTAdapter.extend({ host: 'https://api.example.com' });
请求person如今讲导航到https://api.example.com/people/1。
3. Path Customization
默认的,这个RESTAdapter将尝试复数化和驼峰化这个model name去生成path name。若是这个约定对你的后台来讲不符合,你能够重写pathForType方法。
例如,若是你不但愿复数化模型名字而且须要underscore_case(下划线命名)代替驼峰化命名,你能够像这样重写pathForType方法:
app/adapters/application.js
export default DS.RESTAdapter.extend({ pathForType: function(type) { return Ember.String.underscore(type); } });
请求person如今将会导航到/person/1。请求userProfile想在将会导航到/user_profile/1。
4. Authoring Adapters
这个默认的defaultSerializer属性能够被用于指定序列化器,它将被这个适配器使用。这个仅仅当一个指定的模型序列化器或者ApplicationSerializer 没有被定义时被使用。
在应用程序中,定义一个ApplicationSerializer一般很简单。然而,若是你是一个社区适配器的做者,在你的适配器用户不指定一个ApplicationSerializer的状况下,记得设置这个属性来保证Ember作正确的事是很是重要的。
app/adapters/my-custom-adapter.js
export default DS.RESTAdapter.extend({ defaultSerializer: '-default' });
3、Community Adapters
若是没有内置的Ember Data适配器为你的后台工做,必定要去查看一些社区维护的Ember Data适配器。
下面是一些查找Ember Data适配器比较好的地方: