SAPUI5 1.84 Fiori概览页多自定义卡片控制器继承配置问题
在SAPUI5 1.84 Fiori Overview Page中实现多自定义卡片独立控制器并继承通用Card类
问题核心
添加多个自定义卡片时,旧教程的配置会导致控制器共享;直接在manifest中指定controllerName后,自定义控制器又无法继承sap.ovp.cards.generic.Card的核心功能,本质是控制器继承逻辑和OVP框架的控制器查找机制未匹配到位。
正确配置方案
1. 修正Manifest中的卡片配置
在manifest.json的sap.ovp/cards数组中,为每个自定义卡片明确指定viewName和controllerName,确保路径完全匹配自定义控制器的命名空间:
{ "sap.ovp": { "cards": [ { "id": "CustomCard1", "settings": { "title": "自定义卡片1", "entitySet": "YourEntitySet1", "cardType": "component", "viewName": "your.app.namespace.customcards.card1.view.Card", "controllerName": "your.app.namespace.customcards.card1.controller.Card" } }, { "id": "CustomCard2", "settings": { "title": "自定义卡片2", "entitySet": "YourEntitySet2", "cardType": "component", "viewName": "your.app.namespace.customcards.card2.view.Card", "controllerName": "your.app.namespace.customcards.card2.controller.Card" } } ] } }
2. 自定义控制器的正确继承写法
每个自定义控制器必须通过sap.ui.define引入sap.ovp.cards.generic.Card,并通过extend方法继承,同时必须调用父类的生命周期方法以保留通用卡片的核心功能:
sap.ui.define([ "sap/ovp/cards/generic/Card" ], function(Card) { "use strict"; return Card.extend("your.app.namespace.customcards.card1.controller.Card", { onInit: function() { // 调用父类onInit,确保通用卡片的初始化逻辑执行 Card.prototype.onInit.apply(this, arguments); // 此处添加卡片1的自定义初始化逻辑 this._customInit(); }, // 自定义方法示例 _customInit: function() { // 处理卡片1的专属逻辑 }, // 重写父类方法示例(如需) onAfterRendering: function() { Card.prototype.onAfterRendering.apply(this, arguments); // 自定义渲染后逻辑 } }); });
卡片2的控制器写法完全一致,仅需修改命名空间和自定义逻辑即可。
3. 关键注意事项
- 确保
controllerName的命名空间与控制器文件的实际路径完全对应,OVP框架会严格根据该路径查找控制器。 - 所有生命周期方法(如
onInit、onBeforeRendering)必须先调用父类的对应方法,否则sap.ovp.cards.generic.Card中封装的卡片基础功能(如数据绑定、工具栏行为)会失效。 - 卡片类型
cardType设置为component是自定义卡片的标准配置,避免使用旧教程中可能的非标准类型导致框架行为异常。
内容的提问来源于stack exchange,提问作者Jack Taylor
相关产品推荐
相关产品推荐

