以Opportunity為例,直接在ButtonRenderer.js的render方法設個斷點就行了:

它會被反複call到,先是觸發4次,因為Opportunity右下角有4個button。
然後又觸發一次,為了畫這個<- button:
然後又觸發一次,畫這個sort,這一點可以通過sort tooltip識别:
然後畫這個add button,可以通過icon 識别:
看callstack:
另外确實像你說的,MasterHeaderFooter 最重要的邏輯都寫在下面這個js file裡,
從注釋發現defineMasterHeaderFooter方法隻有在每次list binding 發生change時才會被call到。每次odata回來時,_handleSuccess會trigger list binding change。
這個define方法就會call我們controller裡實作的getHeaderFooterOptions了。好好理一下關系吧。