一些SAP UI5的控件无法按照预期渲染的错误分析方法和解决方案
我在index.html里寫了下面這段代碼:
'var oButton1 = new sap.m.Button({text : "Button",tooltip : "This is a test tooltip",press : function() {alert('Alert from ' + oButton1.getText());}});oButton1.placeAt("content");'但是在服務器上運行這個index.html,發現在正式模式下遇到下面這個錯誤消息:
“Uncaught TypeError: Cannot read property ‘Button’ of undefined”
但奇怪的是,在調試模式下是沒問題的。
處理此類問題的經驗是,一般此類涉及到在debug mode能工作(不能工作), 但是正常情況下不能工作(能工作)的issue,不管任何語言,都和runtime執行時序有關。
這個問題的root cause是,在new sap.m.Button時,sap.ui.core, sap.m還沒有被load下來,執行new sap.m.Button這句就會報錯,找不到。具體如下:
(1) 為什么非debug模式下,sap.ui.core和sap.m沒有被load下來呢?
非debug模式下,會根據preload標識決定load是同步還是異步,這里設置的是async:
所以,在new sap.m.Button時,sap.ui.core, sap.m還沒有被load下來。
如果preload被設置為 sync ,就會看到button被正常render。
(2) 為什么debug模式下,new sap.m.Button時,sap.ui.core和sap.m已經被load下來呢?
debug模式下,會使用requireModule load lib:
不會根據preload標識決定load是同步還是異步:
這個issue可以引申出另一個知識點,如果我就要求data-sap-ui-preload=“async”,有沒有辦法保證在非debug mode下,每次運行應用仍然成功呢?
另一個問題:這個bootstrap的id能改成其他比如"helloWorld"么?為什么?
因為已經Src已經滿足滿足預期的正則表達式,執行不到下面的分支了。
總結
以上是生活随笔為你收集整理的一些SAP UI5的控件无法按照预期渲染的错误分析方法和解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲁班的扫射触发末世吗
- 下一篇: 华为maraloo是什么型号