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一样,证明两个变量指向的是同一个实例。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
在深入探讨SAP UI5 OData开发之前,需要明确几个关键点:SAP UI5是一个前端开发框架,而OData(Open Data Protocol)是一种基于Web的协议,允许创建和消费可查询和可更新的数据服务。SAP Gateway是SAP NetWeaver的一...
Web Dynpro是SAP公司推出的一种企业级的Web应用程序开发框架,主要针对复杂...由于其紧密集成于SAP生态系统,Web Dynpro在ERP、CRM和其他企业级解决方案中扮演着重要角色,为开发者提供了构建现代、高效Web应用的途径。
首先,Web Dynpro由三个核心组件组成:控制器(Controller)、视图(View)和模型(Model)。控制器处理业务逻辑,视图定义用户界面布局,而模型负责数据管理。这种分层架构使得代码组织有序,易于理解和维护。 在...
OpenUI5是SAP公司推出的一个开放源代码的UI框架,基于HTML5和CSS3,专为构建企业级应用而设计。在Bozwo中,OpenUI5提供了丰富的组件库和强大的数据绑定机制,帮助开发者构建现代、响应式的GUI。这些组件包括表格、...
2. 使用SAP UI5开发工具(如Web IDE或Visual Studio Code扩展)来编写和调试Fiori应用。 3. 实现RBAC以确保应用安全。 4. 调试和优化JavaScript代码以提高性能。 5. 集成Fiori应用到Fiori Launchpad并进行定制。 6. ...