SAPUI5中标准控件的重写方法



是否有方法覆盖SAPUI5中标准控件的方法?我想覆盖CalendarRow.js 的'_getAppointmentsSorted'方法

我尝试复制粘贴整个文件并更改方法,但后来我得到了以下错误:

加载失败来自的'be/amistaAdminPlanning/controls/MyCalendarRowRenderer.js'./controls/MyCalendarRowRenderer.js:404-找不到

我试图通过如下指定渲染器来修复此错误:

renderer: function(oRm, oControl) {
sap.ui.unified.CalendarRowRenderer.render(oRm, oControl); 
}

CalendarRowRenderer已找到,但呈现方法的执行不正常,并弹出以下错误消息:

无法读取CalendarRowRenderer.js中未定义的属性"getId"?eval:6

有人知道它为什么会这样吗?

扩展

sap.ui.unified.CalendarRow.extend("be.amistaAdminPlanning.controls.MyCalendarRow", {
renderer: function(oRm, oControl) {
sap.ui.unified.CalendarRowRenderer.render(oRm, oControl);
}
});
function _getAppointmentsSorted() {
var aAppointments = this.getAppointments();
aAppointments.sort(function(oApp1, oApp2) {
var iResult = oApp1.getStartDate() - oApp2.getStartDate();
if (iResult == 0) {
iResult = oApp2.getEndDate() - oApp1.getEndDate();
}
return iResult;
});
return aAppointments;
}

您应该创建自己的自定义控件,例如CalendarRowExtended,而不是"复制粘贴整个文件",并覆盖自定义控件中的函数。

这些链接可能很有用:

扩展文本字段呈现

带有附加事件的扩展按钮

编辑:很抱歉,没有看到克里斯托夫的评论,因为它是在我之前几分钟写的。但我想这个想法是一样的

我没有详细测试它,但我认为以下应该有效:

创建文件app_name_space/control/CalendarRowCustom.js文件夹"control"与"controller"、"view"文件夹处于同一级别。

用以下内容填充CalendarRowCustom.js:

sap.ui.define(
['sap/ui/unified/CalendarRow'],
function(CalendarRow) {
"use strict";
return CalendarRow.extend("app_name_space.control.CalendarRowCustom",{
_getAppointmentsSorted: function() {
// Here goes your custom code
},
renderer: {}
});
}
);

根据文档中的这个示例,renderer: {}应该继承父控件的功能。

然后你应该能够在这样的视图中使用你的自定义控件:

<mvc:View controllerName="..." xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:mvc="sap.ui.core.mvc" xmlns:cust="app_name_space.control">
<cust:CalendarRowCustom />
</mvc:View>

用视图和控件中定义的命名空间替换">app_name_space"。

最新更新