重庆幸运农场中奖金额|重庆幸运农场官网
MyException - 我的異常網
當前位置:我的異常網» Web前端 » SAP UI5和CRM WebUI的View和Controller是怎么綁定的

SAP UI5和CRM WebUI的View和Controller是怎么綁定的

www.h0f1.com  網友分享于:2018-06-06  瀏覽:0次
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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

?
?

文章評論

軟件開發程序錯誤異常ExceptionCopyright © 2009-2015 MyException 版權所有
重庆幸运农场中奖金额