乐趣区

关于javascript:sapuicoreIAsyncContentCreation-这个标记接口在-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 预处理器用于创立视图和片段。

退出移动版