7.11 Models -- Customizing Adapters

1、概述html

1. 在Ember Data中,和后台数据存储通讯的逻辑存在于Adapter中。Ember Data的有一些内置的假设,一个 REST API 应该怎么看。若是你的后台约定和这些假设不一样,Ember Data经过交换或扩展默认的适配器很容易改变它的功能。git

2. 自定义适配器的一些缘由包括在你的urls中使用underscores_case,使用一个介质而不是REST去和你的后台API甚至使用一个local backendgithub

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

  • DS.Adapter:它是基本的没有任何功能的adapter。若是你想建立一个适配器,它一般是一个很好的起点,这是彻底不一样于其余的Ember adapters。
  • DS.RESTAdapter:它是最多见的扩展adapter。这个RESTAdapter容许你的store经过XHR传输的JSON和一个HTTP服务器通讯。大多数Ember.js应用程序消耗一个JSON API,它应该使用这个REST适配器。
  • DS.ActiveModelAdapter:这是一个特定版本的RESTAdapter,这被设定为经过Rails-style REST APIS开箱即用。

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适配器比较好的地方:

相关文章
相关标签/搜索