是否有方法覆盖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"。