UI5
比方我在UI5的界面上画一个按钮,点击以后弹出一个Alert dialog。
在XML view里只定义了controller的称号和事宜处置惩罚函数的称号。那末按钮被点击以后,controller的onShowHello被触发。然则,这个controller的实例是什么时刻被竖立, 而且关联到这个说明它的XML view里呢?
在XMLView.js里,我定义的XML view的源代码被加载以后,XMLView会挪用XMLTemplateProcessor, 剖析XML view的内容,依据内里的control说明竖立对应的UI5控件实例。下图的变量_xContent.innerHTML即为上图XML view的源代码。
XMLView的实例经由过程工场形式竖立以后,XMLView源代码里定义的controller称号sap.ui.demo.walkthrough.controller.App,会赋到oView实例的字段_controllerName上。
View和Controller的绑定是经由过程这个要领createAndConnectController完成:
connect controller to view after controller and control tree are fully initialized
Controller的实例也经由过程工场形式竖立:
一旦connectToView实行以后,
oView和oController的关联关联就竖立起来了。
CRM WebClient UI
每一个UI component view里有一个built-in的属性controller, 指向这个view对应的controller实例。
在BSP的编程环境里,开发人员基础无需费心这个controller实例的初始化,直接用就行。
那末View的controller实例究竟在什么时刻被框架初始化的?
要本身搞清楚这个题目,能够随意找个BSP UI component做个试验。我找的是PRDHS。在其View的controller CL_PRDHS_HEADER_IMPL的组织函数里设置断点:
翻开该view,从挪用栈上下文即可得知BSP框架在什么地方初始化controller实例的。记下这个实例在ABAP runtime的地点编号4633:
同UI5逻辑相似,在CL_BSP_PAGE_BASE~CREATE_PAGE内部,第190行竖立controller的实例并将其同View实例竖立关联关联。
末了运行时View的controller实例4633和之前我们在PRDHS/Header的controller CL_PRDHS_HEADER_IMPL的组织函数中的me指针4633一样,证实两个变量指向的是同一个实例。