logon dialog 的弹出逻辑debug出来了,有很多有用的代码片段
Sent: Tuesday, 20 October, 2015 8:02 PM
這兩天在做UI端的performance優(yōu)化,昨天Ross發(fā)現(xiàn)在My Opportunity Application初始化的時候,會發(fā)出一個額外odata call去獲取attachment數(shù)據(jù):
但是這個odata call會返回一個空的response:
比較奇怪的是application的初始化并沒有執(zhí)行任何跟attachment相關(guān)的代碼,唯一有可能的地方就是UI的定義,在初始化XML View的時候發(fā)出了odata請求:
把items的綁定從XML View移除,放到當用戶真正點擊attachment tab的時候再用javascript做綁定:
再測試,發(fā)現(xiàn)application初始化的時候返回空值的odata call不會出現(xiàn)了,但是在點擊attachment tab的時候,發(fā)出了兩次對attachment的請求:
其中第二條odata call就是之前初始化app時候發(fā)出的多余請求,說明框架內(nèi)部對控件初次綁定的時候是需要請求數(shù)據(jù)的,于是debug了一下bindAggregation的實現(xiàn):
在sap-ui-core.js中定義了一個私有的_bindAggregation方法:
在這個方法中,框架先從控件中獲取Model,根據(jù)已經(jīng)綁定到控件的Data Model的類型決定Binding的類型,如果不存在Model,則默認用ODataListBinding:
上面返回空值的odata call就是a調(diào)用initialize()這一句發(fā)出的,如果控件沒有Model,這里的a就是一個ODataListBinding
再回過來看剛才還有一個odata call (network里面的第一條),獲取了attachment數(shù)據(jù)之后將數(shù)據(jù)set到控件的JSON Model里面:
于是將bind aggregation的邏輯移到這個odata call的回調(diào)里面做,這個時候控件已經(jīng)綁定了JSON Model,所以determine出來的binding類型是JSONListBinding,就不會再發(fā)一次多余的odata call了。
總結(jié):如果給UI5控件綁定數(shù)據(jù)的時候是自己寫邏輯用JSON Model的,要注意一下控件初始化還沒有數(shù)據(jù)的時候,有沒有額外的odata call,造成不必要的開銷。
查了一下UI5的API,好像沒找到UI5控件支持綁定了OData 之后,數(shù)據(jù)延遲加載的屬性……
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的logon dialog 的弹出逻辑debug出来了,有很多有用的代码片段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国志战略版无当飞军怎么获得 阵容怎么搭
- 下一篇: 新浪微博帐号无法登陆怎么办