从一个控制器到另一个控制器使用功能,可能吗?

Use Function from one controller to the other, possible?

我目前遇到了一些事情,世界上没有人可能不得不这样做。

我有 3 个控制器,我希望第 3 个控制器使用第一个控制器的功能。

这是它的样子:

这是我的主控制器,它有一个名为 "onRefresh" 的功能,我想触发它​​。

这是调用对话框函数的细节控制器:

最后是我的 ApprovalDialog 控制器,我希望在触发确认按钮后立即为主视图执行 ListRefresher。我只是不知道如何做到这一点,或者根本不知道。

            openDialog: function(OBJID, bApprove, aPurchaseOrders) {
            var fnPromise = function(fnResolve, fnFailed) {
                var sApprovalText, sTitle;
                this._ChrId = OBJID;
                this._fnApproveActionFinished = fnResolve;
                this._fnApproveFailed = fnFailed;
                this._bApprove = bApprove;
                this._aPurchaseOrders = aPurchaseOrders;

// This doesnt work
                    Controller.Master.onRefresh();

你知道有答案吗?

看到 Andrii 的回答,我想我快到了:)

谢谢@Andrii- 这是目前的情况: 来自 SubControllerForApproval - Controller

子控制器

代码:

我建议您为此目的使用事件总线:

中央事件路由器将是您的 组件,这意味着您将在组件实例上触发和侦听事件。

它将看起来像这样:

主控制器:

onInit”中的某处:

this.getOwnerComponent().attachEvent("ExternalMasterRefresh", this.onRefresh, this);

某处细节或对话框控制器:

this.getOwnerComponent().fireEvent("ExternalMasterRefresh");

这些是EventProvider的方法。

您可以按照 Andrii Naumovych 的建议使用事件总线,它应该可以工作。

顺便说一句,在sapui5中遇到这样的问题意味着你的模型和数据绑定不是那么好。由详细视图触发的操作可以明确更新绑定在主视图中的模型,这就是可行的方法。

sapui5 带来了强大的数据绑定框架,旨在摆脱事件处理 ;)

如果您用第 3 个控制器扩展第一个控制器,第 3 个控制器将继承 onRefresh() 方法

开发人员指南中应该有一个示例: https://sapui5.hana.ondemand.com/#docs/guide/95d113be50ae40d5b0b562b84d715227.html

如果我没理解错的话,事件总线有点矫枉过正