Sent: Tuesday, 20 October, 2015 8:02 PM

这两天在做UI端的performance优化,昨天Ross发现在My Opportunity Application初始化的时候,会发出一个额外odata call去获取attachment数据:

但是这个odata call会返回一个空的response:

比较奇怪的是application的初始化并没有执行任何跟attachment相关的代码,唯一有可能的地方就是UI的定义,在初始化XML View的时候发出了odata请求:

把items的绑定从XML View移除,放到当用户真正点击attachment tab的时候再用javascript做绑定:

再测试,发现application初始化的时候返回空值的odata call不会出现了,但是在点击attachment tab的时候,发出了两次对attachment的请求:

其中第二条odata call就是之前初始化app时候发出的多余请求,说明框架内部对控件初次绑定的时候是需要请求数据的,于是debug了一下bindAggregation的实现:

在sap-ui-core.js中定义了一个私有的_bindAggregation方法:

在这个方法中,框架先从控件中获取Model,根据已经绑定到控件的Data Model的类型决定Binding的类型,如果不存在Model,则默认用ODataListBinding:

上面返回空值的odata call就是a调用initialize()这一句发出的,如果控件没有Model,这里的a就是一个ODataListBinding

再回过来看刚才还有一个odata call (network里面的第一条),获取了attachment数据之后将数据set到控件的JSON Model里面:

于是将bind aggregation的逻辑移到这个odata call的回调里面做,这个时候控件已经绑定了JSON Model,所以determine出来的binding类型是JSONListBinding,就不会再发一次多余的odata call了。

总结:如果给UI5控件绑定数据的时候是自己写逻辑用JSON Model的,要注意一下控件初始化还没有数据的时候,有没有额外的odata call,造成不必要的开销。
查了一下UI5的API,好像没找到UI5控件支持绑定了OData 之后,数据延迟加载的属性……
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

logon dialog 的弹出逻辑debug出来了,有很多有用的代码片段相关推荐

  1. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出

    文章目录 目标 代码 0.页面结构 1.新增按钮和弹出表单:结构 2.新增按钮和弹出表单:点击新增弹出表单 3.表单样式 4.表单验证 5.表单的提交和取消功能:接口.mock相关准备 6.表单的提交 ...

  2. dialog - JS弹出窗口

    原文地址为: dialog - JS弹出窗口 请先调用dialog JS var diag = new Dialog(); //窗体大小 diag.Width = 300; diag.Height = ...

  3. Android Dialog无法弹出输入法问题

    Dialog如果带Edittext 等输入控件,Android其实已经默认弹出输入法了. 延时弹出没用,延时弹出没用,延时弹出没用,延时弹出没用 网络上其他不弹出的情况, 1.低版本可能不兼容,需要强 ...

  4. html弹窗后 自动关闭页面,网页一键复制弹出提示窗口后几秒后自动关闭提示js代码...

    L 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ...

  5. linux 弹出窗口,实现弹出窗口的window.open用法详解(js代码)

    实现弹出窗口的window.open用法详解(js代码) [1.最基本的弹出窗口代码] 其实代码非常简单: 因为这是一段javascripts代码,所以它们应该放在 cript">标签 ...

  6. Customing 维护中TR弹出逻辑

    Created by Jerry Wang, last modified on Oct 31, 2014 在某些系统上做完customizing后,点save时会弹出要求存入transport req ...

  7. Android仿IOS Dialog底部弹出月历式时间选择器

    最近项目需求要写一个类IOS并且是月历样式的时间选择器,如图: 少废话,成品如下: 1. 思路 界面部分 <LinearLayout<LinearLayout/><Linear ...

  8. Dialog无法弹出的问题

    可能原因:弹窗需在主线程中执行. 如果是在子线程中,可这样设置: Handler handler = new Handler(Looper.getMainLooper()); handler.post ...

  9. java弹出提示框jo类_Java JobMeta.getJobLogTable方法代码示例

    import org.pentaho.di.job.JobMeta; //导入方法依赖的package包/类 public static String getLastExecutionResult(L ...

最新文章

  1. BERT-Pytorch demo初探
  2. 性能测试,负载测试,压力测试以及容量测试的联系与区别--网搜及总结
  3. recovery的init.rc中挂载system
  4. ios键盘横屏_cocos2d 3.2版本IOS因键盘引起横竖屏问题
  5. Adopting Modern Objective-C
  6. python 投资组合_成功投资组合的提示
  7. JQuery学习系列总结—菜单制作
  8. c语言判断回文字符串递归,用递归实现判断一个字符串是否为回文串
  9. Spark:Yarn-cluster和Yarn-client区别与联系
  10. java中对象排序_java中 对象的排序
  11. windows内置的linux安卓驱动多系统摆脱虚拟机(上)
  12. makefile工作笔记0001---认识使用makefile
  13. signature=4c9125bac76ec40553ba356eaca47964,2008 SEM Honorary Members Conversations
  14. Gartner发布云安全能力评估报告:阿里云全球第二,超过亚马逊!
  15. 那些远去的人,那段伟大的历史【ZZ】
  16. 9.Memcached 介绍
  17. php zip扩展文件,php使用ZipArchive扩展实现文件的zip压缩与zip解压
  18. PS:制作螺旋波点背景色块
  19. 三、EXCEL复制数字到txt文件,存在空格
  20. 【Python3】23.求平方根---牛顿迭代法

热门文章

  1. 设置ViewPager 自动滑动时间,速度 方便展示动画
  2. Window (Standard IO)
  3. CSS实现三列图片等宽等间距布局
  4. 20135206于佳心【家庭作业汇总】
  5. servlet多线程
  6. FileUpload路径
  7. vue2.0项目引入element-ui
  8. HTML转义字符大全 (换行,enter,所有特殊字符)
  9. toolbar + DrawerLayout 实现抽屉菜单
  10. 【CTR模型】TensorFlow2.0 的 DCN(Deep Cross Network) 实现与实战(附代码+数据)