SAP UI5和CRM WebUI的View和Controller是如何绑定的

摘要:
在XML视图中,只定义了控制器的名称和事件处理程序的名称。CRMWebClientUI在每个UIcomponentview中都有一个内置属性控制器,它指向与此视图对应的控制器实例。在BSP编程环境中,开发人员无需担心控制器实例的初始化,只需直接使用它。视图控制器实例是何时由框架初始化的?视图中的控制器CL _ PRDHS_HEADER_在IMPL的构造函数中设置断点:打开此视图以了解BSP框架从调用堆栈上下文中初始化控制器实例的位置。
UI5

例如我在UI5的界面上画一个按钮,点击之后弹出一个Alert dialog。
SAP UI5和CRM WebUI的View和Controller是如何绑定的第1张

在XML view里只定义了controller的名称和事件处理函数的名称。那么按钮被点击之后,controller的onShowHello被触发。但是,这个controller的实例是什么时候被创建, 并且关联到这个申明它的XML view里呢?

SAP UI5和CRM WebUI的View和Controller是如何绑定的第2张

在XMLView.js里,我定义的XML view的源代码被加载之后,XMLView会调用XMLTemplateProcessor, 解析XML view的内容,根据里面的control申明创建对应的UI5控件实例。下图的变量_xContent.innerHTML即为上图XML view的源代码。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第3张

XMLView的实例通过工厂模式创建之后,XMLView源代码里定义的controller名称sap.ui.demo.walkthrough.controller.App,会赋到oView实例的字段_controllerName上。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第4张

View和Controller的绑定是通过这个方法createAndConnectController完成:

connect controller to view after controller and control tree are fully initialized

SAP UI5和CRM WebUI的View和Controller是如何绑定的第5张

Controller的实例也通过工厂模式创建:

SAP UI5和CRM WebUI的View和Controller是如何绑定的第6张
一旦connectToView执行之后,

SAP UI5和CRM WebUI的View和Controller是如何绑定的第7张

oView和oController的关联关系就建立起来了。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第8张

CRM WebClient UI

每个UI component view里有一个built-in的属性controller, 指向这个view对应的controller实例。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第9张

在BSP的编程环境里,开发人员根本无需操心这个controller实例的初始化,直接用就行。

那么View的controller实例究竟在什么时候被框架初始化的?

要自己搞清楚这个问题,可以随便找个BSP UI component做个实验。我找的是PRDHS。在其View的controller CL_PRDHS_HEADER_IMPL的构造函数里设置断点:

SAP UI5和CRM WebUI的View和Controller是如何绑定的第10张

打开该view,从调用栈上下文即可得知BSP框架在什么地方初始化controller实例的。记下这个实例在ABAP runtime的地址编号4633:

SAP UI5和CRM WebUI的View和Controller是如何绑定的第11张

同UI5逻辑类似,在CL_BSP_PAGE_BASE~CREATE_PAGE内部,第190行创建controller的实例并将其同View实例建立关联关系。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第12张

最后运行时View的controller实例4633和之前我们在PRDHS/Header的controller CL_PRDHS_HEADER_IMPL的构造函数中的me指针4633一样,证明两个变量指向的是同一个实例。

SAP UI5和CRM WebUI的View和Controller是如何绑定的第13张

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

SAP UI5和CRM WebUI的View和Controller是如何绑定的第14张

SAP UI5和CRM WebUI的View和Controller是如何绑定的第15张

免责声明:文章转载自《SAP UI5和CRM WebUI的View和Controller是如何绑定的》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用LitJson解析json信息elementui 模态框 拖动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Mybatis-Plus学习笔记(八)】基本配置

本系列博客其他文章请点击下方链接查看【Mybatis-Plus学习笔记】目录 基本配置 首先分享一下官网的Mybatis-Plus配置。 configLocation mybatis-plus.config-location=classpath:mp.xml 就是导入外部的xml配置,现在已经很少用了,因为xml太过繁琐。 注意:configLocati...

SAP-以树形方式显示 物料BOM

SAP默认的BOM报表是表格式,可以通过选中“变量清单”,以图形方式显示BOM的层次样式; 1 、输入事务代码: CS11,选择产品、工厂及应用程序;      点击菜单-”编辑“-”视图“或按F5,  2、在“显示”选项框中,选中“变量清单”,点“执行” 3、原始显示结果 4、点菜单,“转到”-“图形”,或按F5;    6、层次显示 效果  ...

js 处理 xml对象和String字符串之间的转换

/** * xml工具 * xml对象和String字符串之间的转换 * ///convert string to xml object (将字符串转换成xml对象) function string2XML(xmlString) { //所有浏览器统一用这种方式处理(因为高版本的浏览器都支持) let parser = new DOM...

XML系列之--解析电文格式的XML(二)

      上一节介绍了XML的结构以及如何创建。讲到了XML可作为一种简单文本存储数据,把数据存储起来,以XML的方式进行传递。当接收到XML时,必不可少的就是对其进行解析,捞取有效数据,或者将第三方数据以节点的形式填充至此XML。无论如何,都离不开对XML的解析,XML有一般的,同样也有二般的,这一节就来介绍如何对这些XML进行解析。 1. 普通XML...

这10道springboot常见面试题你需要了解下

1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。 如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。...

JQuery实现省市区三级联动

[中国地区列表.xml下载] jquery版本:1.2.6,传说jquery1.3异步加载会出现卡的情况。 js内容: Codevar j = jQuery.noConflict();var prov="";var city="";var area="";j(function(){    j.get("/Js/Message/address.xml",f...