SAPUI5中的EventBus是什么用的?

Roh*_*ade 2 sapui5

任何人都可以解释我们将使用EventBus方法的时间和时间吗?还有什么样的活动一样.

Bog*_*ann 7

UI5中的EventBus是一个工具,我们可以利用它在我们的应用程序中利用发布 - 订阅模式.

我们如何获得EventBus?

目前,有两个API返回自己的EventBus实例:

  • 全球:EventBus对于:
    • 独立的应用程序
    • 代码共享平台(如JSBin)中的最小演示
  • 基于组件:sap.ui.getCore().getEventBus();适用于Fiori应用程序.由于Fiori Launchpad(FLP)上的"apps"是组件,因此SAP建议从组件而不是核心获取EventBus.

    如果需要事件总线,请使用组件的事件总线.这样,您可以避免冲突事件名称,并确保在卸载组件时自动删除侦听器.千万不能使用全局事件总线.

笔记

  1. 每当用户导航回Home时,FLP就会销毁该组件.
  2. 在致电之前this.getOwnerComponent().getEventBus(); // Given this === controller,请确保getEventBus()初步要求该模块:

    sap.ui.define([
      // ...,
      "sap/ui/core/EventBus"
    ], function(/*...*/) {/*...*/});
    
    Run Code Online (Sandbox Code Playgroud)

    否则,模块将通过同步XHR加载,应避免使用.

它是为了什么?

使用EventBus,我们可以自由触发(通过sap/ui/core/EventBus)和收听(通过publish())我们自己的自定义事件:

  • 无需使用或扩展任何Control/ManagedObject/EventProvider类,
  • 在不知道其他相关听众(如果有)的存在的情况下,
  • 无需访问触发事件的对象(发布者).例如:无需打电话subscribe().

出版商和订阅者彼此无知,这使得松散耦合成为可能.

类似于现实世界,EventBus就像一个广播电台.一旦它开始在各种渠道上广播各种各样的东西,那些感兴趣的人可以听取特定的频道,得到通知,并用给定的数据做一些富有成效的事情.这是一张图片,说明了EventBus的基本行为.

说实话,我没有遇到任何我喜欢EventBus而不是标准解决方案的情况.如果我们遵循最佳实践,我们现在在UI5中几乎不需要它[1].我很乐意听到一些反驳意见.


[1]:EventBus曾经在UI5的早期阶段发挥重要作用,用于导航.