Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何扩展Fiori标准应用程序的ErrorHandler_Javascript_Sapui5_Sap Fiori - Fatal编程技术网

Javascript 如何扩展Fiori标准应用程序的ErrorHandler

Javascript 如何扩展Fiori标准应用程序的ErrorHandler,javascript,sapui5,sap-fiori,Javascript,Sapui5,Sap Fiori,下面的帖子可能是我问题的答案,但我看不出来: 我正在扩展一个Fiori标准应用程序(MyProfile是具体的),所以一切正常。现在,客户希望根据网关发送的技术消息显示特殊错误消息。因此,我尝试在组件.js中扩展ErrorHandler: jQuery.sap.declare("com.company.hcm.fab.myprofile.ext.Component"); jQuery.sap.require("com.company.hcm.fab.myprofile.ext.controlle

下面的帖子可能是我问题的答案,但我看不出来:

我正在扩展一个Fiori标准应用程序(MyProfile是具体的),所以一切正常。现在,客户希望根据网关发送的技术消息显示特殊错误消息。因此,我尝试在组件.js中扩展ErrorHandler:

jQuery.sap.declare("com.company.hcm.fab.myprofile.ext.Component");
jQuery.sap.require("com.company.hcm.fab.myprofile.ext.controller.ErrorHandler");
sap.ui.component.load({
    name: "hcm.fab.myprofile",
    url: "/sap/bc/ui5_ui5/sap/hcmfab_prfl_mon" 
});

this.hcm.fab.myprofile.Component.extend("com.company.hcm.fab.myprofile.ext.Component", {
    metadata: {
        manifest: "json"
    },

    init: function() {
        hcm.fab.myprofile.Component.prototype.init.apply(this, arguments);
        this._oErrorHandler = new com.company.hcm.fab.myprofile.ext.controller.ErrorHandler(this);
    }
});
我扩展了ErrorHandler.js,正如我从所示帖子中理解的那样:

sap.ui.define([
    "hcm/fab/myprofile/controller/ErrorHandler",
    "sap/m/MessageBox"
], function(ErrorHandler, MessageBox) {
    "use strict";

    return ErrorHandler.extend("com.company.hcm.fab.myprofile.ext.controller.ErrorHandler", {
        constructor: function (oComponent) {
            this._oResourceBundle = oComponent.getModel("i18n").getResourceBundle();
            this._oComponent = oComponent;
            this._oModel = oComponent.getModel();
            this._sErrorText = this._oResourceBundle.getText("errorTitle");
            this._oModel.attachRequestFailed(this._requestFailedHandler, this);
        },

        _requestFailedHandler: function(oEvent) {
            var oParameters = oEvent.getParameters();
            console.log("now?", oResponse);
            this._showServiceError(oParameters.response);
        }

    });

});
尽管如此,我不仅看到了我的消息,而且仍然在标准应用程序中看到了来自ErrorHandler的消息。有人有主意吗

致意 马可

更新 为了澄清我的想法:在我正在扩展的原始应用程序中,ErrorHandler是在init方法中初始化的。因此,如果我做对了,我必须完全重写init方法,或者我找到一种分离原始事件的方法,然后我可以扩展或重写ErrorHandler。
我更喜欢后面的选项,因为我不仅要在这个标准的fiori应用程序中扩展ErrorHandler,还要在其他六个应用程序中扩展ErrorHandler。总是重写init方法比总是重写ErrorHandler感觉更糟。

我猜是因为您首先调用了超级方法来初始化原始ErrorHandler(即将事件处理程序附加到失败的请求等)。之后,您只需在自己的ErrorHandler中附加更多处理程序。您需要分离以前的处理程序(可能很棘手),或者首先不初始化原始类。

我想是因为您首先调用了超级方法来初始化原始ErrorHandler(即将事件处理程序附加到失败的请求等)。之后,您只需在自己的ErrorHandler中附加更多处理程序。您需要分离以前的处理程序(可能很棘手),或者不首先初始化原始类。

感谢您的评论!我更新了我原来的帖子以澄清我的想法。是的,分离可能很棘手;不确定这是否容易实现,因为附加的方法是原始ErrorHandler中的匿名函数。也许您会找到一种方法,但是覆盖init是最简单的解决方案。不过,这取决于这些应用程序的init函数有多复杂,以及在未来版本中进行更改的可能性有多大。感谢您的评论!我更新了我原来的帖子以澄清我的想法。是的,分离可能很棘手;不确定这是否容易实现,因为附加的方法是原始ErrorHandler中的匿名函数。也许您会找到一种方法,但是覆盖init是最简单的解决方案。然而,这取决于这些应用程序的init函数有多复杂,以及未来版本中发生更改的可能性有多大。