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。

在这种情况下,您的代码应该可以正常工作,无需任何更改。