在我的SAPUI5应用程序中,我有一个控制器(Produzione-Stato),该控制器扩展了另一个控制器(ExcelGenerator)。在Component.js文件中,我添加了以下属性:

customizing: {
       "sap.ui.controllerExtensions": {
            "cabot.ui.wt.controller.Produzione-Stato": {
                controllerName: "cabot.ui.wt.controller.ExcelGenerator",
                },
       }
}


该应用程序在此阶段运行良好。但是我希望ExcelGenerator控制器扩展另一个控制器(例如C2ExcelGenerator)。我试图通过添加以下内容来修改Component.js文件:

customizing: {
       "sap.ui.controllerExtensions": {
            "cabot.ui.wt.controller.Produzione-Stato": {
                controllerName: "cabot.ui.wt.controller.ExcelGenerator",
                },
            "cabot.ui.wt.controller.ExcelGenerator": {
                 controllerName: "cabot.ui.wt.controller.C2ExcelGenerator",
                },
       }
}


但是,这会引发异常错误。在多级平台上扩展控制器或使一个控制器扩展多个控制器的正确方法是什么?

最佳答案

使用具有extend语法的类型化控制器,所质疑的场景将如下所示:

Produzione-Stato.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller"
], function(Controller) {
    return Controller.extend("cabot.ui.wt.controller.Produzione-Stato", {
        onInit: function() {}
        ...
    });
});


ExcelGenerator.controller.js

sap.ui.define([
    "cabot/ui/wt/controller/Produzione-Stato"
], function(PSController) {
    return PSController.extend("cabot.ui.wt.controller.ExcelGenerator", {
        onInit: function() {
            PSController.prototype.onInit.apply(this, arguments);
        }
        ...
    });
});


C2ExcelGenerator.controller.js

sap.ui.define([
    "cabot/ui/wt/controller/ExcelGenerator"
], function(EGController) {
    return EGController.extend("cabot.ui.wt.controller.C2ExcelGenerator", {
        onInit: function() {
            EGController.prototype.onInit.apply(this, arguments);
        }
        ...
    });
});



  生命周期方法的链接不会自动完成。您
  可以自行控制是否调用父级生命周期
  方法。此外,您始终可以访问在
  原始控制器。


关于Controller Replacement中的类型化控制器扩展

10-01 10:35
查看更多