1. 程式人生 > >SAP UI5框架中,onInit方法執行次數的討論

SAP UI5框架中,onInit方法執行次數的討論

onInit只會被執行一次:
在這裡插入圖片描述
在這裡插入圖片描述

_getViewWithGlobalId最後會呼叫onInit:
在這裡插入圖片描述

UI框架都是相通的,我們以前做的Web UI,onInit也只會執行一次,而DO_PREPARE_OUTPUT每次roundtrip都會被call到,相當於UI5的before/afterRendering.
在這裡插入圖片描述
ABAP webdynpro也是如此。
在這裡插入圖片描述
但我從未留意過框架的實現,其實也就是:onInit被method A 觸發, onBefore/AfterRendering被method B觸發,而method A在整個生命週期只會被call 一次,而method B會被重複call到。

The router will be initialized according to your components.js definition,it only returns the routing information which matches your url pattern.

在這裡插入圖片描述

簡單看了下,以onInit為例,on能清晰地表明這是個event Handler,event name 為Init。有eventHandler就一定有event issuer, 我們不考慮有應用手動call onInit這種技術上可行,但沒人這樣做的錯誤做法。
在view執行完其pre-preocessor之後,框架就會fire一個afterInit的event,且這個event只會fire一次,所以event listener也就只會被call 一次。

至於controller的onInit是什麼時候註冊到view的init event上,這就是UI5的MVC design了,在241行。仔細看callstack。

有個問題,View的onBeforeRendering只會觸發一次。這個可以任意找一個頁面嘗試。為什麼View instance的onBeforeRendering只會執行一次?
1.當第一次進入View的時候,頁面都會從最外層控制元件一直到最裡面的子控制元件逐一render,在逐一render過程中,顯示trigger了 onBeforeRendering

2.當在介面中切換detail page,只會partially update,此過程不再有呼叫onBeforeRendering