SAP UI5和CRM WebUI的View和Controller是怎样绑定的

UI5

比方我在UI5的界面上画一个按钮,点击以后弹出一个Alert dialog。
《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

在XML view里只定义了controller的称号和事宜处置惩罚函数的称号。那末按钮被点击以后,controller的onShowHello被触发。然则,这个controller的实例是什么时刻被竖立, 而且关联到这个说明它的XML view里呢?

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

在XMLView.js里,我定义的XML view的源代码被加载以后,XMLView会挪用XMLTemplateProcessor, 剖析XML view的内容,依据内里的control说明竖立对应的UI5控件实例。下图的变量_xContent.innerHTML即为上图XML view的源代码。

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

XMLView的实例经由过程工场形式竖立以后,XMLView源代码里定义的controller称号sap.ui.demo.walkthrough.controller.App,会赋到oView实例的字段_controllerName上。

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

View和Controller的绑定是经由过程这个要领createAndConnectController完成:

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

Controller的实例也经由过程工场形式竖立:

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》
一旦connectToView实行以后,

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

CRM WebClient UI

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

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

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

要本身搞清楚这个题目,能够随意找个BSP UI component做个试验。我找的是PRDHS。在其View的controller CL_PRDHS_HEADER_IMPL的组织函数里设置断点:

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

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

《SAP UI5和CRM WebUI的View和Controller是怎样绑定的》

    原文作者:JerryWangSAP
    原文地址: https://segmentfault.com/a/1190000014204277
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞