国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Ember 自定義適配器

2018-01-06 18:01 更新

Ember應用中適配器決定了數(shù)據(jù)保存到后臺的方式,比如URL格式和請求頭部。Ember Data默認的適配器是內(nèi)置的REST API回調(diào)

實際使用中經(jīng)常會擴展默認的適配器。Ember的立場是應該通過擴展適配器來添加不同的功能,而非添加標識。這樣可以使得代碼更加容易測試、更加容易理解,同時也降低了可能需要擴展的適配器的代碼。

如果你的后端使用的是Ember約定的規(guī)則那么可用使用適配器adapters/application.js。適配器application優(yōu)先級比默認的適配器高,但是比指定的模型適配器優(yōu)先級低。模型適配器定義規(guī)則是:adapter-modelName.js。比如下面的代碼定義了一個模型適配器adapter-post。

//  app/adapters/adapter-post.js


import Ember from 'ember';
export default DS.JSONAPIAdapter.extend({
    namespace: 'api/v1'
});

此時適配器的優(yōu)先級次序為:JSONAPIAdapter > application> 默認內(nèi)置適配器;

Ember內(nèi)置的是配有如下幾種:

  1. DS.Adapter 這個適配器是最基礎的適配器,它不包含任何功能。如果需要創(chuàng)建一個與Ember適配器有根本性區(qū)別的適配器可以使從這個適配器入手。
  2. DS.JSONAPIAdapter 這個適配器是默認適配器,并且是遵循JSON API規(guī)范,用于與HTTP服務器之間通過XHR交互JSON數(shù)據(jù)。
  3. DS.RESTAdapter 這個適配器與第二個適配器功能一樣,并且在Ember Data2.0之前是作為默認的適配器。

1,自定義JSONAPIAdapter適配器

JSONAPIAdapter適配器通常用于擴展非標準的后臺接口。

1,URL規(guī)范

JSONAPIAdapter適配器非常智能,它能夠自動確定URL鏈接是那個模型。比如,如果你需要通過id獲取post

this.store.find('post', 1).then(function(post) {
    //  處理post
});

JSONAPIAdapter會自動發(fā)送get請求到/post/1。

下表是Action、請求、URL三者的映射關系(由于本站markdown解析器不支持表格所以直接使用截圖替代了)。

映射關系截圖

比如在action中執(zhí)行find()方法,會發(fā)送get請求,JSONAPIAdapter會自動解析成形如/posts/1的URL。

2,多元化定制

為了適配復數(shù)名字的模型屬性名稱,可以是使用Ember Inflector綁定別名。

let inflector = Ember.Inflector.inflector;
inflector.irregular('formula', 'formulae');
inflector.uncountable('advice');

這樣綁定之后目的是告訴JSONAPIAdapter。你可以使用/formulae/1代替/formulas/1。但是目前我還沒搞清楚這個設置是什么意思?又有什么用?如果讀者知道請指教。

3,斷點路徑定制

使用屬性namespace可以設置URL的前綴。

app/adapters/application.js
import Ember from 'ember';
export default DS.JSONAPIAdapter.extend({
  namespace: 'api/1'
});

請求person會自動轉(zhuǎn)發(fā)到/api/1/people/1。

4,自定義主機

默認情況下適配器會轉(zhuǎn)到當前域名下。如果你想讓URL轉(zhuǎn)到新的域名可以使用屬性host設置。

app/adapters/application.js
import Ember from 'ember';
export default DS.JSONAPIAdapter.extend({
  host: 'http://api.example.com'
});

注意:如果你的項目是使用自己的后臺數(shù)據(jù)庫這個設置特別重要!?。傩?code>host所指的就是你服務器接口的地址。

請求person會自動轉(zhuǎn)發(fā)到http://api.example.com/people/1

5,自定義路徑

默認情況下Ember會嘗試去根據(jù)復數(shù)的模型類名、中劃線分隔的模型類名生成URL。如果需要改變這個默認的規(guī)則可以使用屬性pathForType設置。

// app/adapters/application.js
import Ember from ‘ember’;
export default DS.JSONAPIAdapter.extend({
  pathForType: function(type) {
    return Ember.String.underscore(type);
  }
});

修改默認生成路徑規(guī)則為下滑線分隔。比如請求person會轉(zhuǎn)向/person/1。請求user-profile會轉(zhuǎn)向/user_profile/1(默認情況轉(zhuǎn)向user-profile/1)。

6,自定義請求頭

有些請求需要設置請求頭信息,比如提供APIkey??梢砸枣I值對的方式設置頭部信息,Ember Data會為每個請求都加上這個頭信息設置。

app/adapters/application.js
import Ember from 'ember';
export default DS.JSONAPIAdapter.extend({
  headers: {
'API_KEY': 'secret key',
'ANOTHER_HEADER': 'some header value'
  }
});

更強大地方是你可以在header中使用計算屬性,動態(tài)設置請求頭信息。下面的代碼是將一個session對象設置到適配器中。

app/adapters/application.js
import Ember from ‘ember’;
export default DS.JSONAPIAdapter.extend({
  session: Ember.inject.service(‘session’);
  headers: Ember.computed(‘session.authToken’, function() {
‘API_KEY’: this.get(‘session.authToken’),
‘ANOTHER_HEADER’: ‘some header value’  
  });
});

對于session應該非常不陌生,特別是在控制用戶登錄方面使用非常廣泛,另外又一個非常好用的插件,專門用于控制用戶登錄的,這個插件是Ember Simple Auth,另外有一篇博文是介紹如何使用這個插件實現(xiàn)用戶登錄的,請看使用ember-simple-auth實現(xiàn)Ember.js應用的權限控制的介紹。

你還可以使用volatile()方法設置計算屬性為非緩存屬性,這樣每次發(fā)送請求都會重新計算header里的值。

// app/adapters/application.js
import Ember from ‘ember’;
export default DS.JSONAPIAdapter.extend({
  //  ……
  }).volatile();
});

更多有關于適配器的信息瀏覽下面的網(wǎng)址:

對于適配器主要掌握JSONAPIAdapter足矣,如果你需要個性化定制URL或者請求的域名可以在適配中配置。不過大部分情況下都是使用默認設置。


博文完整代碼放在Github(博文經(jīng)過多次修改,博文上的代碼與github代碼可能有出入,不過影響不大?。?,如果你覺得博文對你有點用,請在github項目上給我點個star吧。您的肯定對我來說是最大的動力??!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號