[英]Overriding method of standard control in SAPUI5
有没有办法在SAPUI5中覆盖标准控件的方法? 我想覆盖CalendarRow.js的方法'_getAppointmentsSorted'
我尝试复制粘贴整个文件并更改方法,但是随后出现以下错误:
无法从./controls/MyCalendarRowRenderer.js加载'be / amistaAdminPlanning / controls / MyCalendarRowRenderer.js':404-找不到
我试图通过指定渲染器来解决此错误,如下所示:
renderer: function(oRm, oControl) {
sap.ui.unified.CalendarRowRenderer.render(oRm, oControl);
}
找到了CalendarRowRenderer,但是render方法未按应有的方式执行,并弹出以下错误消息:
无法读取 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 ”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.