写点什么

sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5 框架中的应用

作者:Jerry Wang
  • 2022 年 6 月 04 日
  • 本文字数:838 字

    阅读完需:约 3 分钟

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 预处理器用于创建视图和片段。

发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
sap.ui.core.IAsyncContentCreation 这个标记接口在 SAP UI5 框架中的应用_前端开发_Jerry Wang_InfoQ写作社区