首页 文章 精选 留言 我的

精选列表

搜索[list],共10002篇文章
优秀的个人博客,低调大师

SAP Fiori里的List是如何做到懒加载Lazy load的

今天一同事问我这个问题:S/4HANA Fiori应用里的列表,一旦Scroll到底部就会自动向后台发起新的请求把更多的数据读取到前台显示。 以Product Master这个应用为例,我点击搜索之后,结果区域显示当前系统一共有140个product,但是只有前25个返回并显示在浏览器里。 这个分页效果是UI5 OData的参数实现的:$skip=0&top=25。 而总数140,是通过参数$inlinecount实现,其原理和ABAP Open SQL的SELECT COUNT(*)类似。 从Chrome开发者工具能观察到头25个product的payload: 当将列表滚动至底部时,第二批共25个product从后台读取出来,显示在前台: 这个http请求的参数:$skip=25&top=25,用于读取从第25个到第50个product。 从调用栈能清楚发现是scroll这个事件触发的第二批product的读取动作。 然后再去GrowingEnablement.requestNewPage这一个调用栈,发现一个属性_iLimit维护了一个开始索引,每次scroll到底部的事件触发之后,该属性值都会被GrowingThreshold累加。 因为API this._oControl.getGrowingThreshold每次返回的是一个常量25, 因此_iLimit的值每次scroll到底部之后看起来是这样的:25,50,75,100 ... 这些值会被用来作为HTTP请求参数$skip的值传到后台: 我同事的问题:growingThreshold在文件sap.m.ListBase.js里被硬编码成20, 但是运行时在何处被改写成了25? 要回答这个问题,需要了解一些UI5 Smart Template的知识,因为例子里这个Product Master的Fiori应用,也是基于Smart Template开发的。可以参考我的博客My understanding about how object page in Smart Template is rendered 来了解其工作原理。 当Product Master这个应用的UI Component被加载并马上开始渲染时,需要先加载Smart Template的库文件: 在我博客My understanding about how object page in Smart Template is rendered 提到,ListReport.view.xml这个文件里有若干view fragment的声明,每个声明指向了一些其他的Smart Template库文件。 这些库文件一览: 在Chrome开发者工具查看从ABAP后台加载的库文件SmartTable.fragment.xml,能发现属性growingThreshold在此处被硬编码成25。 当SmartTable.fragment.xml被加载之后其内容会被解析, growingThreshold值为25,会通过控件的setter API写入到控件属性里。这样接下来在处理列表的scroll事件是,25这个值就会通过控件的getter API返回并累加到_iLimit上。 关于XML view从ABAP后台加载到浏览器后是如何被解析并生成对应的UI5控件,可以参考我的博客Why my formatter does not work? A trouble shooting example to know how it works 也许您按照我上面描述的步骤操作,但是无法触发断点。原因是因为UI5框架针对基于Smart Template开发的Fiori应用的XML view设计了一套缓存机制。当待渲染的XML view已经在缓存中存在时,不会去ABAP后台加载Smart Template的库文件, 而是直接执行第428行的IF分支。 通过调试我们可以发现缓存是通过IndexedDB加上LRU(Leastrecentlyused)算法实现的。 通过Chrome开发者工具可以观察到待渲染的view已经有记录存储在IndexedDB里了: 如果想观察Smart Template库文件的加载,需点击"Delete database"以手动清除缓存。 缓存清除完毕后,即可观察到期望中的Smart Template库文件加载。 这篇文章介绍了如何通过调试找到同事提出问题的答案。我把它加在了我UI5调试文章分享的合集里:My UI5 debugging tips and experience collection - how to resolve UI5 issues through debugging by yourself要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

优秀的个人博客,低调大师

ndk-build中出现警告mangling of 'va_list' has changed in GCC 4.4

最近安装了NDK R8B,但是在cygwin下开始使用ndk-build时出现大量的如题所示的警告。于是,先GOOGLE一下,寻找模糊答案。又到NDK下载网站看 到,NDKR8B确实更新了C++编译器。而且,有网文介绍说,使用NDK R8不会出现那样的警告。这个,我没有试验,估计OK(因为作者说他自己试验了)。 又得到如下内容: DavidTurner(fromtheAndroidNDKteamsays 本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/1441533 ,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册