Angular和SAP C4C的事件处理队列
Angular
我们在Angular框架的代码里能看到一个名为processQueue的函数:
这个函数是通过 s c o p e . scope. 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发现由 s c o p e . scope. scope.apply触发的JavaScript执行序列里又出现了 s c o p e . scope. 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的原创文章,请关注公众号"汪子熙":
相关文章
- [SAA + SAP] 28. Monitoring
- 80. 采用测试驱动开发理念(Test Driven Development)进行 SAP UI5 应用的功能开发(二)
- 44. SAP UI5 应用 Label 和 Input 控件文本没有水平对齐的原因分析和解决方案
- 通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读版
- 深入学习SAP UI5框架代码系列之八:谈谈 SAP UI5 的视图控件 ID,以及 SAP UI5 视图和 Angular 视图的异同
- SAP UI5和Angular的函数防抖(Debounce)和函数节流(Throttle)实现原理介绍
- 显示SAP CRM Product hierarchy的一个小工具
- SAP CRM webclient ui help link超链接的生成逻辑
- SAP SD数据库表一览
- SAP Spartacus里Commerce后台CMS Component和前台Angular的一一映射关系
- SAP 电商云 Spartacus UI Angular Component 动态创建的单步调试
- SAP Spartacus 服务器端渲染单步调试步骤之二:在服务器端执行应用程序 Angular 代码
- Angular 事件绑定语法在 SAP Spartacus Popover Component 中的一个应用
- 查看 SAP Spartacus 基于 Angular 的版本号
- SAP Spartacus 里对 isPlatformBrowser API 的使用
- SAP Spartacus 3.0 的一些变化
- 如何根据SAP Spartacus的页面快速找到实现的Angular Component
- SAP Spartacus维护CMS Component到Angular Component的源代码位置
- SAP Spartacus 中 Angular json pipe 的工作原理
- 使用Angular依赖注入自定义SAP Spartacus的ProductAdapter
- Angular 里 HTTP 请求和响应结构的拦截器(interceptors)在 SAP Spartacus 中的应用
- SAP HANA里执行SQL语句的两种方式
- SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享试读版
- SAP Fiori Launchpad Contact Support的按钮启用逻辑
- SAP Spartacus默认的货币列表currency是从源代码什么地方读取的
- Angular 事件绑定语法在 SAP Spartacus Popover Component 中的一个应用
- 查看 SAP Spartacus 基于 Angular 的版本号