我正在使用自定义控件扩展sap.ui.unified.Calendar,覆盖renderDays()函数,在每天div中放置一个额外的span标记。
控制台指示小时数组未定义。它抛出下面发现的错误,但之后继续工作。此错误阻止使用标题箭头在日历中的月份之间移动。这个渲染两次吗?为什么一小时[]未定义,但之后确定?
如果我将所有代码放入单个文件JSBin中,则不会出错。 JSBin
自定义控件的代码顶部:
sap.ui.unified.Calendar.extend("control.TimeCalendar", {
metadata : {
properties : {
"hoursData" : "string[]"
}
},
renderer: {
renderDays: function(oRm, oCal, oDate){
var hours = oCal.getHoursData();
控制台输出:
Cannot read property 'length' of undefined
摘自自定义控件TimeCalender.js。这是在do ... while循环中,它将每一天放在日历上。在函数放置日期的地方,我还包括一个span标记,其中包含从数组'hours'中检索到的数字。
oRm.write("<span class=\"sapUiCalDayNum\">");
if ( (hours.length>i) && (hours[i].day == oDay.getUTCDate()) ) {
oRm.write("<span class=\"hours\">");
oRm.write(hours[i].hours);
oRm.write("</span>");
if(i <= hours.length) { i++; }
}
oRm.write(oDay.getUTCDate());
oRm.write("</span>");
答案 0 :(得分:0)
猜测一下,我会说你在非jsbin场景中使用数据绑定,数据是从后端异步接收还是在第一次渲染后设置?
在这种情况下,hoursdata值设置为undefined,这会导致错误。
如果你定义这样的属性:
properties : {
"hoursData" : { type: "string[]", defaultValue: [] }
}
...这样你就可以确保总有一个数组,它有一个长度属性。