likes
comments
collection
share

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5

作者站长头像
站长
· 阅读数 28

这是 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.

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5

根据这个布尔变量的值,分别进入异步创建实例和同步创建实例两个分支。

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5

同样的逻辑还存在于 UIComponent.createContent 函数内。

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5

总的来说,同步或者异步创建对 SAP UI5 应用开发人员的业务逻辑代码编写没有影响,这是 SAP UI5 框架的内部实现差异。

UI5 中的 XML 模板是使用 XML Preprocessor 创建的。 XML 模板将与元模型和元上下文一起传递给 XML 预处理器。 XML 预处理器用于创建视图和片段。