任何人都可以解释什么以及何时使用EventBus methods吗?同样是什么样的 Activity 。
最佳答案
UI5中的EventBus是一种工具,我们可以使用它在应用程序中利用publish-subscribe pattern。
我们如何获得EventBus?
当前,有两个API返回自己的EventBus
实例:
sap.ui.getCore().getEventBus();
用于:this.getOwnerComponent().getEventBus(); // Given this === controller
。由于Fiori Launchpad(FLP)上的“应用”是组件,因此SAP recommends将从组件而不是从核心获取EventBus。笔记
每次用户返回Home时,
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 EventBus在navigation的UI5早期曾扮演着重要角色。
关于sapui5 - SAPUI5中的EventBus有什么用途?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37187748/