Angular和SAP C4C的事件处理队列
Angular
我们在Angular框架的代码里能看到一个名为processQueue的函数:
这个函数是通过$scope.$apply启动的:
核心代码位于一个for循环里,循环体是一个存储异步处理任务的队列asyncQueuePosition:
for (var asyncQueuePosition = 0; asyncQueuePosition < asyncQueue.length; asyncQueuePosition++) {
try {
asyncTask = asyncQueue[asyncQueuePosition];
fn = asyncTask.fn;
fn(asyncTask.scope, asyncTask.locals);
} catch (e) {
$exceptionHandler(e);
}
lastDirtyWatch = null;
}
队列里每个元素长这样的:一个处理函数fn,一个局部变量locals和scope对象:
这个注释也非常有用:一旦Angular发现由$scope.$apply触发的JavaScript执行序列里又出现了$scope.$apply的嵌套调用,会抛出错误消息:$digest already in progress
// It's safe for asyncQueuePosition to be a local variable here because this loop can't
// be reentered recursively. Calling $digest from a function passed to $evalAsync would
// lead to a '$digest already in progress' error.
C4C 事件队列
C4C的事件处理器,EventProcessor.js有一个事件队列:
该队列的实现位于sap/client/evt/的OperationQueue.js中:
随便在C4C UI做一个点击,能触发EventProcessor的_processQueue,C4C事件队列的处理和Angular思路一样,只不过是一个while循环替代了Angular的for循环:
C4C事件队列里每个元素属性如下,可以同Angular事件元素做对比:
fFunc就相当于Angular时间元素的fn属性,environment相当于Angular事件元素的scope属性。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
错误消息 This computer doesn't have VT-X/AMD-v enabled
在VirtualBox的Ubuntu虚拟机里试图本地安装Kyma(一个基于Kubernetes的开源框架)时,遇到下面的错误信息: E0827 11:19:38.972489 3093 start.go:174] Error starting host: Error creating host: Error executing step: Running precreate checks. : This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory. Retrying. E0827 11:19:38.972667 3093 start.go:180] Error starting host: Error creating host: Error executing step: Running precreate checks. : This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is...
-
下一篇
Windows下使用python库 curses遇到错误消息的解决方案
在Windows系统下执行python应用时,有时会遇到错误信息: ModuleNotFoundError: No module named '_curses'. 然而查看Windows系统里python安装文件,发现在Lib文件夹里确实有一个名为curses的子文件夹,里面也存放了curses库对应的实现,为什么还是会报找不到_curses这个mobule的错误消息呢? 原来,这个问题的根源是curses库不支持Windows操作系统,因此如果您用Windows操作系统并且确实需要用curses库,那得另想办法。 我提供了一种解决方案。首先执行python命令,得到当前我的python版本是3.7.0. 然后打开这个链接: https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses 下载和您的python版本对应的curse库。对于我来说,因为我的python版本是3.7.0, 因此需要下载curses-2.2+utf8-cp37-cp37m-win32.whl. 下载完毕后,使用pip install "curses-2.2+utf8-cp...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果