我目前陷入困境,世界上没有人可能曾经做过。
我有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
子控制器
代码:
答案 0 :(得分:0)
我建议你为此目的使用事件总线:
中央事件路由器将是您的组件,这意味着您将触发并侦听组件实例上的事件。
看起来像这样:
主控制器:
“ onInit ”中的某个地方:
this.getOwnerComponent().attachEvent("ExternalMasterRefresh", this.onRefresh, this);
详细信息或对话框控制器中的某处:
this.getOwnerComponent().fireEvent("ExternalMasterRefresh");
这些是EventProvider的方法。
答案 1 :(得分:0)
你可以使用Andrii Naumovych提出的事件总线,它应该可以工作。
顺便说一句,在sapui5中遇到这样的问题反而意味着你的模型和数据绑定不是那么好。由详细视图触发的操作可以明确更新主视图中绑定的模型,这将是最佳选择。
sapui5带来了强大的数据绑定框架,可以摆脱事件;)
答案 2 :(得分:0)
如果你用第3个扩展你的第一个控制器,第3个将继承onRefresh()方法
在开发者指南中应该有一个例子: https://sapui5.hana.ondemand.com/#docs/guide/95d113be50ae40d5b0b562b84d715227.html
如果我理解正确,事件总线有点矫枉过正