天天看點

dojo/request子產品整體架構解析

 總體說明

  做前端當然少不了ajax的使用,使用dojo的童鞋都知道dojo是基于子產品化管理的前端架構,其中對ajax的處理位于dojo/request子產品。一般情況下我們使用ajax請求隻需要引入dojo/request子產品,然後按照文檔的說明制定參數即可。實際上dojo在這一子產品的進行中抽象了很多概念:

平台偵探器:dojo/request/default

請求分發器:dojo/request/registry

全局通知器:dojo/request/notify

資料傳輸器:dojo/request/xhr dojo/request/script dojo/request/iframe dojo/request/node

資料轉化器:dojo/request/handlers

  處理器的總體關系如下圖所示:

  

dojo/request子產品整體架構解析

  正是這些概念使得dojo在ajax請求上能夠提供強大的擴充性和簡捷的接口。

  provider

  請求傳輸器被稱為provider,dojo架構自身提供了以下4個provider

dojo/request/xhr 提供跨浏覽器的xmlhttprequest,在浏覽器端它被作為預設的provider

dojo/request/node 用于node平台的異步請求,在node下呗當做預設的provider。dojo是可以運作在node平台下的,當然需要做一些配置,這是另一篇文章的主要内容

dojo/request/iframe 不重新整理浏覽器傳輸form表單,在檔案上傳時經常用到

dojo/request/script 常以jsonp方式來進行跨域請求

dojo/request子產品整體架構解析
dojo/request子產品整體架構解析
dojo/request子產品整體架構解析

  關于這幾個provider的詳細講解請繼續關注下一篇文章

  default

  一般情況下我們發送ajax請求時隻需引入dojo/request即可,實際上這是在default中根據不同的運作平台自動給我們提供了一個預設的provider。

dojo/domready 

dojo/text 用于加載靜态資源檔案

dojo/i18n 加載國際化語言檔案

dojo/has 用于特性檢測

dojo/require

  當在define或require中一個子產品引用包含一個!,dojo的加載器會自動将這個子產品引用字元串在!處分開,左邊部分作為一個子產品引用對待,右邊部分,等待左邊子產品加載完畢後交由子產品的load方法處理;

  關于load函數的幾個參數:

id:代表!右側部分

parentrequire:上下文智能的require請求器

loaded:id子產品加載完畢後的回調

config:猜測是dojo/_base/config

  後三個參數是dojo自己來處理,一般情況下我們不需要關心。

  關于插件還要在說幾句:

  dojo中不會像緩存module一樣緩存插件所加載的資源比如:我們可以多次引用同一個module,但是這個module隻會加載一次,這是amd規範所強制規定的。但是我如果多次dojo/text!./template.html這個template.html會被加載多次。

  notify

  最後的一句:util.notify= notify; util将notify與provider關聯起來。

  registry

  該子產品可以在不同的情況下使用不同的provider;比對的條件可以是正規表達式、字元串或者函數。通過registry可以根據不同的條件注冊不同的provider。

  以下便是registry的源碼:

  handlers

  dojo中提供了以下三種資料轉化器:

dojo/request子產品整體架構解析

  此外,handlers有跟registry類似的register方法,可以讓我們自定義資料轉化器。

 如果您看完本篇文章感覺不錯,請點選一下下方的推薦來支援一下部落客,謝謝!

繼續閱讀