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

相關文章
相關標籤/搜索