1. 程式人生 > 其它 >sap.ui.core.IAsyncContentCreation 這個標記介面在 SAP UI5 框架中的應用

sap.ui.core.IAsyncContentCreation 這個標記介面在 SAP UI5 框架中的應用

這是 sap.ui.core.UIComponent 子類的標記介面(Marker interface)。

什麼是標記介面?

可以查閱我這篇文章:ABAP和Java的tag(marker) interface

簡單地說,Marker interface 是程式語言在不支援註解(annotation)的情況下, 通過介面的概念,來為一個類或者函式(JavaScript 裡的 function)增添元資料的技術手段。

回到本例,標記了介面 sap.ui.core.IAsyncContentCreationUIComponent 子類,說明 SAP UI5 框架能夠完全非同步地建立其例項。該介面將隱式設定 Component 的 rootView 和路由器配置為非同步方式建立。

在 Component 同步建立模式下,SAP UI5 框架的 createContent 函式直接返回建立好的例項。

所謂 Component 的非同步建立,即是 SAP UI5 框架的 createContent 函式,返回一個 Promise. 這個 Promise 也將被連結到 Component.create 工廠方法的結果 Promise 中。

我們可以單步除錯來觀察執行時,SAP UI5 框架是如何處理這個 marker interface 的。

XMLTemplateProcessor.js 裡的邏輯,負責將 SAP UI5 工程裡的 XML 檢視的原始碼,解析成樹形結構,這個樹形結構的每一個節點就是一個 SAP UI5 控制元件定義,在執行時就是一個個 SAP UI5 控制元件例項。XMLTemplateProcessor 負責建立這些控制元件例項。

下圖程式碼:

var bIsAsyncComponent = oOwnerComponent && oOwnerComponent.isA("sap.ui.core.IAsyncContentCreation");

意思是檢查當前待建立的 Component,原始碼裡是否在 metadatainterfaces 數組裡,定義了 sap.ui.core.IAsyncContentCreation 這個標記介面。如果定義了,布林變數 bIsAsyncComponent 的值為 true.

根據這個布林變數的值,分別進入非同步建立例項和同步建立例項兩個分支。

同樣的邏輯還存在於 UIComponent.createContent

函式內。

總的來說,同步或者非同步建立對 SAP UI5 應用開發人員的業務邏輯程式碼編寫沒有影響,這是 SAP UI5 框架的內部實現差異。

UI5 中的 XML 模板是使用 XML Preprocessor 建立的。 XML 模板將與元模型和元上下文一起傳遞給 XML 前處理器。 XML 前處理器用於建立檢視和片段。