Table 不显示数据
Table not displaying the Data
这里我使用 table 来显示来自 OData 服务的数据。而不是显示数据,我可以看到空白但什么也没有,这意味着它说值可用。但它无法导航到路径或显示值。
view.xml
<Table id="BoM" headerText="BOM Details" class="sapUiResponsiveMargin" width="auto"
items="{path : 'oModelBoM>/'
}">
<columns>
<Column>
<Label text="Material" />
</Column>
<Column>
<Label text="Component" />
</Column>
<Column>
<Label text="Brand" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{oModelBoM>Material}" />
<Text text="{oModelBoM>Component}" />
<Text text="{oModelBoM>Brand}" />
</cells>
</ColumnListItem>
</items>
</Table>
odata.js
getProductBoM : function(iNumber){
var sNumber = iNumber.toString();
while (sNumber.length < 18) {
sNumber = "0" + sNumber
}
var vUriRead = "/ProductHeadSet('12345')/ProductHead2BOM/
var oResult;
this.initODataModel( );
this.oDataModel.read(vUriRead, null, null, false, function(oData, oResponse) {
oResult = oData;
}, function(oError) {
jQuery.sap.log.error("OData-Error in function getProductBoM (EntityProductHead2BOM)");
xyz_homepage.xyz_homepage.src.odata.displayRequestFailedMessage(oError);
});
return oResult;
}
controller.js
onInit : function() {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.attachRouteMatched(this.handleRouteMatched, this);
this.oModelBoM = new sap.ui.model.json.JSONModel();
this.getView().setModel(this.oModelBoM, "oModelBoM");
},
handleRouteMatched : function(oEvent) {
if (oEvent.getParameter("name") === "ListDetailView") {
var iNumber = oEvent.getParameter("arguments").number;
//Call bom routine and set data
var oBoM = xyz_homepage.xyz_homepage.src.odata.getProductBoM(iNumber);
this.oModelBoM.setData(oBoM);
所以 Uri 尝试导航到路径 BOM,但它没有发生,应该显示匹配 BOM 的“12345”引用。在这里我使用静态参考作为“12345”,添加到同一点可以是动态的。
编辑:
我得到空白 table 但是当我调试时,数组正在传递值。请在下面找到屏幕截图,但 table.
上未显示值
感谢和赞赏!!!
enter image description here
首先,我很惊讶您的 getProductBoM
功能有效。您正在返回一个变量 oResult
。该变量的值是在回调中设置的,因此在大多数情况下是在它返回之后。
你好像把读取函数的async
参数设置为false了?考虑切换到 Promises。同步调用已弃用(浏览器!)。
其次,您的模型具有以下结构:
{
"__metadata": {
...
},
"results": [
{ ... },
{ ... }
]
}
所以我会将您设置数据的行更改为 this.oModelBoM.setData(oBoM.results);
按如下方式在视图中设置 table 绑定应该有效:
<Table id="BoM" items="{path : 'oModelBoM>**results**'}" >
但是,您采用的方法并不是很好。可以去掉jsonModel的使用,读取成功直接绑定OData Model。
在这种情况下,您的代码应该可以正常工作,无需任何更改。
这里我使用 table 来显示来自 OData 服务的数据。而不是显示数据,我可以看到空白但什么也没有,这意味着它说值可用。但它无法导航到路径或显示值。
view.xml
<Table id="BoM" headerText="BOM Details" class="sapUiResponsiveMargin" width="auto"
items="{path : 'oModelBoM>/'
}">
<columns>
<Column>
<Label text="Material" />
</Column>
<Column>
<Label text="Component" />
</Column>
<Column>
<Label text="Brand" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{oModelBoM>Material}" />
<Text text="{oModelBoM>Component}" />
<Text text="{oModelBoM>Brand}" />
</cells>
</ColumnListItem>
</items>
</Table>
odata.js
getProductBoM : function(iNumber){
var sNumber = iNumber.toString();
while (sNumber.length < 18) {
sNumber = "0" + sNumber
}
var vUriRead = "/ProductHeadSet('12345')/ProductHead2BOM/
var oResult;
this.initODataModel( );
this.oDataModel.read(vUriRead, null, null, false, function(oData, oResponse) {
oResult = oData;
}, function(oError) {
jQuery.sap.log.error("OData-Error in function getProductBoM (EntityProductHead2BOM)");
xyz_homepage.xyz_homepage.src.odata.displayRequestFailedMessage(oError);
});
return oResult;
}
controller.js
onInit : function() {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.attachRouteMatched(this.handleRouteMatched, this);
this.oModelBoM = new sap.ui.model.json.JSONModel();
this.getView().setModel(this.oModelBoM, "oModelBoM");
},
handleRouteMatched : function(oEvent) {
if (oEvent.getParameter("name") === "ListDetailView") {
var iNumber = oEvent.getParameter("arguments").number;
//Call bom routine and set data
var oBoM = xyz_homepage.xyz_homepage.src.odata.getProductBoM(iNumber);
this.oModelBoM.setData(oBoM);
所以 Uri 尝试导航到路径 BOM,但它没有发生,应该显示匹配 BOM 的“12345”引用。在这里我使用静态参考作为“12345”,添加到同一点可以是动态的。
编辑:
我得到空白 table 但是当我调试时,数组正在传递值。请在下面找到屏幕截图,但 table.
上未显示值感谢和赞赏!!!
enter image description here
首先,我很惊讶您的 getProductBoM
功能有效。您正在返回一个变量 oResult
。该变量的值是在回调中设置的,因此在大多数情况下是在它返回之后。
你好像把读取函数的async
参数设置为false了?考虑切换到 Promises。同步调用已弃用(浏览器!)。
其次,您的模型具有以下结构:
{
"__metadata": {
...
},
"results": [
{ ... },
{ ... }
]
}
所以我会将您设置数据的行更改为 this.oModelBoM.setData(oBoM.results);
按如下方式在视图中设置 table 绑定应该有效:
<Table id="BoM" items="{path : 'oModelBoM>**results**'}" >
但是,您采用的方法并不是很好。可以去掉jsonModel的使用,读取成功直接绑定OData Model。
在这种情况下,您的代码应该可以正常工作,无需任何更改。