SAP UI5框架中,onInit方法执行次数的讨论

onInit只会被执行一次:
SAP UI5框架中,onInit方法执行次数的讨论_第1张图片
SAP UI5框架中,onInit方法执行次数的讨论_第2张图片

_getViewWithGlobalId最后会调用onInit:
SAP UI5框架中,onInit方法执行次数的讨论_第3张图片

UI框架都是相通的,我们以前做的Web UI,onInit也只会执行一次,而DO_PREPARE_OUTPUT每次roundtrip都会被call到,相当于UI5的before/afterRendering.
SAP UI5框架中,onInit方法执行次数的讨论_第4张图片
ABAP webdynpro也是如此。
SAP UI5框架中,onInit方法执行次数的讨论_第5张图片
但我从未留意过框架的实现,其实也就是: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.

SAP UI5框架中,onInit方法执行次数的讨论_第6张图片

简单看了下,以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

你可能感兴趣的:(UI5,UI5)