SAP UI5和CRM WebUI的View和Controller是如何繫結的
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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2154324/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP CRM WebClient UI和Hybris的controller是如何被呼叫的WebclientUIController
- SAP CRM WebUI, CRM Fiori和C4C裡的Direct NavigationWebUINavigation
- 什麼是 SAP UI5 的繫結路徑UI
- ABAP webdynpro的view navigation和WebUI的view navigationWebViewNavigationUI
- 如何提取SAP UI5 XML view裡定義的欄位元素繫結資訊(binding path)UIXMLView
- SAP UI5 初學者教程之十九 - SAP UI5 資料型別和複雜的資料繫結UI資料型別
- SAP UI5 資料繫結語法裡的特殊符號,以及絕對繫結和相對繫結概念詳解UI符號
- How to prove that SAP CRM WebUI is a stateful applicationWebUIAPP
- SAP UI5 的資料繫結語法概述UI
- Controller和View物件的載入ControllerView物件
- SAP UI5應用入口App.controller.js是如何被UI5框架載入的?UIAPPControllerJS框架
- SAP UI5 初學者教程之二十 - SAP UI5 的表示式繫結用法講解UI
- SAP OData V4 模型的絕對繫結和相對繫結模式模型模式
- SAP UI5 資料繫結中的工廠函式UI函式
- SAP UI5 檢視控制器 View Controller 的生命週期方法 - Lifecycle methodsUIViewController
- 如何檢視CRM WebUI,C4C和Hybris裡的頁面技術資訊WebUI
- SAP CRM Fiori應用和SAP JAM的整合配置
- SAP UI5 StandardListItem和ObjectListItem的區別UIObject
- Angular Ngrx Store 裡 State 和 Reducer 的繫結關係是如何實現的Angular
- SAP UI5 和 OpenUI5 的區別和聯絡UI
- SAP UI5和angular裡的常量定義UIAngular
- C++的動態繫結和靜態繫結C++
- Laravel 路由的隱式繫結和顯式繫結Laravel路由
- 如何在SAP CRM裡建立和消費Web serviceWeb
- 深入學習SAP UI5框架程式碼系列之六:SAP UI5控制元件資料繫結的實現原理UI框架控制元件
- SAP UI5 Gateway Export 和 Client Export 的比較UIGatewayExportclient
- 動態繫結和靜態繫結的簡單理解
- SAP S/4HANA裡extension include view和extension view的區別View
- 關於SAP UI5資料繫結我的一些原創內容UI
- JavaScript 的 this 指向和繫結詳解JavaScript
- 什麼是 SAP UI5 的 Smart FieldUI
- 如何使用程式碼建立和讀取 SAP CRM 訂單的 Text 資料
- 如何將Twitter的內容匯入到SAP CRM和C4C
- UI Component in CRM WebUI and HybrisUIWeb
- SAP CRM和C4C資料同步的兩種方式概述:SAP PI和HCI
- SAP UI5和React的頁面渲染效能比較UIReact
- SAP UI5 Form 和 Simple Form 的設計規範UIORM
- SAP UI5控制元件資料繫結的三種模式 - One Way, Two Way和OneTime實現原理比較UI控制元件模式