如何解决未在SAPUI5的表控件中加载“子模型”数据
环境
框架:SAPUI5 V.1.38.39
使用的控件:Table
IDE:SAP Web IDE
问题
绑定到控件的数据为或为空,或者为oData模型而不是oData“子模型”
代码
manifest.json中主模型的定义:
"sap.app": {
[...]
"dataSources": {
"ZTRACK_AND_TRACE_SRV": {
"uri": "/sap/opu/odata/sap/ZTRACK_AND_TRACE_SRV","type": "OData","settings": {
"odataVersion": "2.0","localUri": "localService/metadata.xml","annotations": []
}
}
}
},[...]
"sap.ui5": {
[...]
"models": {
"TrackAndTrace": {
"type": "sap.ui.model.odata.ODataModel","settings": {
"defaultOperationMode": "Auto","defaultBindingMode": "OneWay","defaultCountMode": "None"
},"dataSource": "ZTRACK_AND_TRACE_SRV","preload": true
},"HandlingUnitMultipleModel": {
"type": "sap.ui.model.odata.ODataModel",[...]
}
在控制器中创建oData模型:
sap.ui.define([
[...]
"TrackAndTrace/ztntapp_b2b/model/models"
],function ([...],models) {
"use strict";
return BaseController.extend("TrackAndTrace.controller.DirectTrackView",{
formatter: formatter,onInit: function () {
var sSendingId = window.URI()._parts.fragment.split("/")[2] ? window.URI()._parts.fragment.split("/")[2] : "";
var sWaybill = window.URI()._parts.fragment.split("/")[3] ? window.URI()._parts.fragment.split("/")[3] : "";
var sZip = window.URI()._parts.fragment.split("/")[4] ? window.URI()._parts.fragment.split("/")[4] : "";
this.initODataModel();
this.getView().setModel(models.createHandlingUnit(this.oTrackNTraceModel,sSendingId,sWaybill,sZip),"HandlingUnitModel");
// this.oTrackNTraceModel is the model from the manifest
[...]
},[...]
如何在model.js中定义HandlingUnitModel:
createHandlingUnit: function (oModel,sZip) {
var HandlingUnitModel = new JSONModel();
oModel.read(`/HANDLING_UNITSet(SendingId='${sSendingId}',Waybill='${sWaybill}',Zip='${sZip}')`,{
success: function (oData) {
HandlingUnitModel.setData(oData.results ? oData.results[0] : oData);
}
});
return HandlingUnitModel;
},
最后在try 1上查看:
<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
<columns>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>date}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>time}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="40%">
<Text text="{i18n>state}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="30%">
<Text text="{i18n>city}" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{path:'HandlingUnitModel>/StateTimestamp',type:'sap.ui.model.type.Date'}"/>
<Text text="{path:'HandlingUnitModel>/StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
<Text text="{parts:[{path: 'HandlingUnitModel>/EventCategory'},{path: 'HandlingUnitModel>/StateId'},{path: 'HandlingUnitModel>/StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
<customData>
<core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
</customData>
</Text>
<Text text="{HandlingUnitModel>/City}" />
</cells>
</ColumnListItem>
</items>
</Table>
尝试1的问题是绑定数据来自HandlingUnitModel,而不是表的“ items”属性中提到的HandlingUnitModel / toDetails
尝试2:
<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
<columns>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>date}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>time}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="40%">
<Text text="{i18n>state}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="30%">
<Text text="{i18n>city}" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{path:'HandlingUnitModel>StateTimestamp',type:'sap.ui.model.type.Date'}"/>
<Text text="{path:'HandlingUnitModel>StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
<Text text="{parts:[{path: 'HandlingUnitModel>EventCategory'},{path: 'HandlingUnitModel>StateId'},{path: 'HandlingUnitModel>StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
<customData>
<core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
</customData>
</Text>
<Text text="{HandlingUnitModel>City}" />
</cells>
</ColumnListItem>
</items>
</Table>
使用try 2时,没有数据绑定,表为空,控制台中没有任何错误消息
尝试3:
<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
<columns>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>date}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="15%">
<Text text="{i18n>time}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="40%">
<Text text="{i18n>state}"/>
</Column>
<Column minScreenWidth="Tablet" demandPopin="true" width="30%">
<Text text="{i18n>city}" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{path:'HandlingUnitModel>/toDetails/StateTimestamp',type:'sap.ui.model.type.Date'}"/>
<Text text="{path:'HandlingUnitModel>/toDetails/StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
<Text text="{parts:[{path: 'HandlingUnitModel>/toDetails/EventCategory'},{path: 'HandlingUnitModel>/toDetails/StateId'},{path: 'HandlingUnitModel>/toDetails/StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
<customData>
<core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
</customData>
</Text>
<Text text="{HandlingUnitModel>/toDetails/City}" />
</cells>
</ColumnListItem>
</items>
</Table>
尝试3的问题与尝试2的问题相同
假设
我想从HandlingUnitModel> / toDetails中的数据没有加载,为什么?以及如何实现它?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。