我有一个sap.m.Label
和sap.m.Text
。我从后端得到的值是NULL
或类似Tue Oct 01 2019 02:00:00 GMT+0200
的日期对象。
我想使用格式化程序将Tue Oct 01 2019 02:00:00 GMT+0200
转换为Oct 01, 2019
,并且如果后端的值为NULL
,则sap.m.Label
和sap.m.Text
均不可见。
这是我的XML:
<Label text="{i18n>ZZDATAB}" id="StartDateLbl"
visible="{
path:'itemDetailData>/StartDate',
formatter:'ui.s2p.srm.sc.approve.util.Formatter.showElementOnUi'
}">
<layoutData>
<sap.ui.layout:ResponsiveFlowLayoutData minWidth="192" weight="3"></sap.ui.layout:ResponsiveFlowLayoutData>
</layoutData>
</Label>
<Text
text="{
path:'itemDetailData>/StartDate',
formatter:'ui.s2p.srm.sc.approve.util.Formatter.formatDateZ'
}"
visible="{
path:'itemDetailData>/StartDate',
formatter:'ui.s2p.srm.sc.approve.util.Formatter.showElementOnUi'
}"
id="StartDateTxt" maxLines="0">
<layoutData>
<sap.ui.layout:ResponsiveFlowLayoutData weight="5"></sap.ui.layout:ResponsiveFlowLayoutData>
</layoutData>
</Text>
我的格式化程序:
ui.s2p.srm.sc.approve.util.Formatter.formatDateZ = function (d) {
if (d === "" || d === null || typeof(d) === "undefined") {
return "";
} else if (typeof(d) === "object") {
var u = new Date(d);
var s = u.toString();
var result = s.substring(4, 10) + ", " + s.substring(11, 16);
return result;
}
return "";
};
ui.s2p.srm.sc.approve.util.Formatter.showElementOnUi = function(obj) {
if (obj === '') {
return false;
} else {
return true;
}
};
问题:如果我调试后端并使itemDetailData>/StartDate
为空,那么即使认为它们应该是不可见的,输出仍然显示那些标签:
Start Date:
End Date:
您可以使用Expression Binding。
并且您可以使用sap.ui.model.type.DateTime格式化日期对象和样式中等(例如,2019年12月31日)
<Label text="{i18n>ZZDATAB}" id="StartDateLbl" visible="{= ${itemDetailData>/StartDate} !== null}">
<layoutData>
<sap.ui.layout:ResponsiveFlowLayoutData minWidth="192" weight="3"></sap.ui.layout:ResponsiveFlowLayoutData>
</layoutData>
</Label>
<Text
text="{path : 'itemDetailData>/StartDate', type : 'sap.ui.model.type.DateTime', formatOptions:{ style: 'medium'}}" visible="{= ${itemDetailData>/StartDate} !== null}" id="StartDateTxt" maxLines="0">
<layoutData>
<sap.ui.layout:ResponsiveFlowLayoutData weight="5"></sap.ui.layout:ResponsiveFlowLayoutData>
</layoutData>
</Text>