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