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