Model view controller UI5中的事件注册-将多个侦听器附加到事件

Model view controller UI5中的事件注册-将多个侦听器附加到事件,model-view-controller,event-handling,sapui5,Model View Controller,Event Handling,Sapui5,如何向UI5中的事件添加多个事件侦听器 我们有一个主列表,其中有一个下拉列表,可以在其控制器上正确触发一个select事件。还需要通知子控制器此下拉列表已更改,以便重新加载模型数据 onalroleschange:函数(oEvent){ var key=oEvent.getParameter(“selectedItem”).getProperty(“text”); 如果(this.ScreenId!=null){ 此.loadScreenByRole(键); //我可以直接调用控制器,但这似乎是

如何向UI5中的事件添加多个事件侦听器

我们有一个主列表,其中有一个下拉列表,可以在其控制器上正确触发一个select事件。还需要通知子控制器此下拉列表已更改,以便重新加载模型数据

onalroleschange:函数(oEvent){
var key=oEvent.getParameter(“selectedItem”).getProperty(“text”);
如果(this.ScreenId!=null){
此.loadScreenByRole(键);
//我可以直接调用控制器,但这似乎是错误的
//controller2.update();
//controller3.update();
}
},
我假设我的目标是在每个控制器中调用某种
registerForEvent()
方法,但在SDK中我没有看到类似的东西
fireEvent()
attachEvent()
是存在的,但我看到的示例似乎是用于创建自定义控件,或响应SAP尚未实现的浏览器事件。

您可以使用通知更改,任何人都可以监听更改。但是,如果其他控制器尚未加载,它们当然不会获得事件。。。也许你可以把这和承诺结合起来


您还可以使用具有双向绑定的全局模型,并将其用于下拉列表。当下拉列表更改时,更改将反映在相应的模型中。同时,在子控制器中,您可以为下拉列表中使用的相同全局模型+路径等创建一个。此外,您将为绑定的更改事件附加一个处理程序。。。这也应该行得通。但是,这与使用EventBus具有相同的缺点,但这可能不是您的问题……

从UI5 1.65开始,在创建ManagedObjects/Controls时可以分配多个事件处理程序:

(…)ManagedObjects现在接受一个事件的多个事件侦听器数组。到 将此用例与已受支持的具有
[data,listener,this]
的数组区分开来,具有多个侦听器的数组也必须对每个侦听器使用嵌套数组表示法[在JS中]。在XMLViews中,多个侦听器必须用分号分隔

语法 在XMLView中

在JS中
新建按钮({
新闻界:[
[listener1],//第一个侦听器
[数据,listener2,thisArg2]//第二个侦听器
]
});

演示
sap.ui.getCore().attachInit(()=>sap.ui.require([
“sap/ui/core/mvc/XMLView”
],XMLView=>XMLView.create({
定义:`
`,
})。然后(view=>view.placeAt(“内容”))

这是个好消息。谢谢