任何人都可以解释我们将使用EventBus methods的时间和时间吗?还有什么样的活动一样。
UI5中的EventBus是一个工具,我们可以在我们的应用程序中利用publish-subscribe pattern。
目前,有两个API返回自己的EventBus
实例:
sap.ui.getCore().getEventBus();
:
独立的应用程序
代码共享平台(如JSBin)中的最小演示this.getOwnerComponent().getEventBus(); // Given this === controller
。由于Fiori Launchpad(FLP)上的“apps”是组件,SAP recommends从组件而不是从核心获取EventBus。
如果需要事件总线,请使用组件的事件总线。这样,您可以避免冲突事件名称,并确保在卸载组件时自动删除侦听器。不要使用全局事件总线。getEventBus()
之前,请确保初步要求使用模块sap/ui/core/EventBus
。例如。:
sap.ui.define([
// ...,
"sap/ui/core/EventBus"
], function(/*...*/) {/*...*/});
否则,模块将通过同步XHR加载,应避免使用。使用EventBus,我们可以解雇(通过publish()
),并自由地(通过subscribe()
)收听我们自己的自定义事件:
thatManagedObj.attach*()
。出版商和订阅者彼此无知,这使得松散耦合成为可能。
类似于现实世界,EventBus就像一个广播电台。一旦它开始在各种渠道上广播各种各样的东西,那些感兴趣的人可以听取特定的频道,得到通知,并用给定的数据做一些富有成效的事情。这是一张图片,说明了EventBus的基本行为:
说实话,我没有遇到任何我喜欢EventBus而不是标准解决方案的情况。如果我们遵循最佳实践,我们现在很难在UI5中使用它.1我很乐意听到一些反驳。
onInit: function() { // file 1
const bus = this.getOwnerComponent().getEventBus();
bus.subscribe("myChannelId", "myEventId", this.shouldDoSomething, this);
},
shouldDoSomething: function(channelId, eventId, parametersMap) {
// get notified from anywhere. E.g. when `doSomething` from file 2 is called
},
doSomething: function(myData) { // file 2
const bus = this.getOwnerComponent().getEventBus();
bus.publish("myChannelId", "myEventId", { myData }); // broadcast the event
},
见API reference: sap/ui/core/EventBus
1事件总线曾经在用于navigation的UI5的早期发挥重要作用。