Uncaught TypeError: Cannot read property 'initialize' of undefined
Uncaught TypeError: Cannot read property 'initialize' of undefined
目前我正在进行一个升级项目;当我从 Component.js;特定于应用程序的配置在单独的 manifest.json 文件中配置。问题是我无法从 Component.js 读取 manifest.json 配置。
我从 Scratch 创建了 SAP Ui5 应用程序,我在其中通过 SAP 的最佳方法论实施并且它们都运行良好,我什至交叉检查了一个工作的 Ui5 应用程序的清单文件,一切都很完美,但我仍然我无法发现问题,并且出现以下异常。
Exception/Error:
UIComponent.js:6 Uncaught TypeError: Cannot read property 'initialize' of undefined
at f.init (Component.js:21)
at f.constructor (sap-ui-core.js:135)
at f.constructor (sap-ui-core.js:141)
at f.constructor (UIComponent.js:6)
at new f (sap-ui-core.js:135)
at Object.sap.ui.component (sap-ui-core.js:141)
at F.a.onBeforeRendering (ComponentContainer.js:6)
at F.a._callEventHandles (sap-ui-core.js:147)
at F.a._handleEvent (sap-ui-core.js:147)
at t (sap-ui-core.js:147)
Component.js [请注意:下面我只分享了初始化方法]
sap.ui.define([
"sap/ui/core/UIComponent",
"xxxx/app/xxxxx/MyRouter"
], function (UIComponent , MyRouter ) {
return UIComponent.extend("xxxx.app.xxxxxx.Component", {
metadata: {
manifest: "json"
},
init : function() {
debugger; // IMDK901184
UIComponent.prototype.init.apply(this, arguments);
// I am getting the exception once the below line is executed.
this.getRouter().initialize();
}
}
});
});
manifest.json
{
"_version": "1.12.0",
"sap.app": {
"id": "xxxxx.app.xxxxx",
"type": "application",
"i18n": "i18n/messageBundle.properties",
"title": "xxxx",
"description": "xxxx",
"applicationVersion": {
"version": "1.0.0"
},
"dataSources": {
"mainService": {
"uri": "xxxx.app.xxxxxx.AppScripts.config.baseURL",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
},
"supportedThemes": [
"sap_bluecrystal"
]
},
"sap.ui5": {
"rootView": {
"viewName": "xxxxx.app.xxxxxx.POSView.App",
"type": "XML",
"async": true,
"id": "idAppControl"
} ,
"dependencies": {
"minUI5Version": "1.30",
"libs": {
"sap.m": {} ,
"sap.ui.core": {},
"sap.ui.layout": {}
}
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "xxxx.app.xxxxxx.i18n.messageBundle"
}
},
"oMainModel": {
"dataSource": "mainService",
"settings": {
"useBatch": false
}
}
} ,
"routing" : {
"config" : {
"routerClass" : "xxxxxx.app.xxxxxx.MyRouter",
"viewType" : "XML",
"viewPath" : "xxxxxx.app.xxxxxx.POSView",
"controlId": "idAppControl",
"targetAggregation" : "detailPages",
"clearTarget" : "false"
} ,
"routes" : [
{
]
}
}
}
我认为您需要实现类似 getRouter() 的方法:
init : function() {
..
..
}
getRouter : function () {
return sap.ui.core.UIComponent.getRouterFor(this);
}
我猜'因为当前安装的 SAP Ui5 版本是 1.26,所以这里不支持新的声明类型 Manifest.json。
重构回 component.js
中的元数据部分
目前我正在进行一个升级项目;当我从 Component.js;特定于应用程序的配置在单独的 manifest.json 文件中配置。问题是我无法从 Component.js 读取 manifest.json 配置。
我从 Scratch 创建了 SAP Ui5 应用程序,我在其中通过 SAP 的最佳方法论实施并且它们都运行良好,我什至交叉检查了一个工作的 Ui5 应用程序的清单文件,一切都很完美,但我仍然我无法发现问题,并且出现以下异常。
Exception/Error:
UIComponent.js:6 Uncaught TypeError: Cannot read property 'initialize' of undefined
at f.init (Component.js:21)
at f.constructor (sap-ui-core.js:135)
at f.constructor (sap-ui-core.js:141)
at f.constructor (UIComponent.js:6)
at new f (sap-ui-core.js:135)
at Object.sap.ui.component (sap-ui-core.js:141)
at F.a.onBeforeRendering (ComponentContainer.js:6)
at F.a._callEventHandles (sap-ui-core.js:147)
at F.a._handleEvent (sap-ui-core.js:147)
at t (sap-ui-core.js:147)
Component.js [请注意:下面我只分享了初始化方法]
sap.ui.define([
"sap/ui/core/UIComponent",
"xxxx/app/xxxxx/MyRouter"
], function (UIComponent , MyRouter ) {
return UIComponent.extend("xxxx.app.xxxxxx.Component", {
metadata: {
manifest: "json"
},
init : function() {
debugger; // IMDK901184
UIComponent.prototype.init.apply(this, arguments);
// I am getting the exception once the below line is executed.
this.getRouter().initialize();
}
}
});
});
manifest.json
{
"_version": "1.12.0",
"sap.app": {
"id": "xxxxx.app.xxxxx",
"type": "application",
"i18n": "i18n/messageBundle.properties",
"title": "xxxx",
"description": "xxxx",
"applicationVersion": {
"version": "1.0.0"
},
"dataSources": {
"mainService": {
"uri": "xxxx.app.xxxxxx.AppScripts.config.baseURL",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
},
"supportedThemes": [
"sap_bluecrystal"
]
},
"sap.ui5": {
"rootView": {
"viewName": "xxxxx.app.xxxxxx.POSView.App",
"type": "XML",
"async": true,
"id": "idAppControl"
} ,
"dependencies": {
"minUI5Version": "1.30",
"libs": {
"sap.m": {} ,
"sap.ui.core": {},
"sap.ui.layout": {}
}
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "xxxx.app.xxxxxx.i18n.messageBundle"
}
},
"oMainModel": {
"dataSource": "mainService",
"settings": {
"useBatch": false
}
}
} ,
"routing" : {
"config" : {
"routerClass" : "xxxxxx.app.xxxxxx.MyRouter",
"viewType" : "XML",
"viewPath" : "xxxxxx.app.xxxxxx.POSView",
"controlId": "idAppControl",
"targetAggregation" : "detailPages",
"clearTarget" : "false"
} ,
"routes" : [
{
]
}
}
}
我认为您需要实现类似 getRouter() 的方法:
init : function() {
..
..
}
getRouter : function () {
return sap.ui.core.UIComponent.getRouterFor(this);
}
我猜'因为当前安装的 SAP Ui5 版本是 1.26,所以这里不支持新的声明类型 Manifest.json。
重构回 component.js
中的元数据部分