SAPUI5 - sap.m.Table,工厂函数不显示列和项

时间:2016-12-23 12:57:51

标签: sap sapui5 sap.m

我有一个要求,我必须从oData动态填充列和行。出于测试目的,我为列和行创建了以下JSON文件。

column.json    

{
    "Columns":  [
        { "column": "col1" },
        { "column": "col2" },
        { "column": "col3" }
    ]
}


row.json

{
    "Rows":  [
        { "col1": "abc",
          "col2": "def",
          "col3": "ghi"
        },
        { "col1": "jkl",
          "col2": "mno",
          "col3": "pqr"
        }
    ]
}

这是我的观点

<core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
        controllerName="sam.test" xmlns:html="http://www.w3.org/1999/xhtml">
    <Table id="ID" 
        columns="{path: 'Column>/Columns', factory: '.populateColumns'}"
        items="{path: 'Row>/Rows', factory: '.populateItems'}">
    </Table></core:View>

请注意,在清单文件中,“Column”指向column.json,“Row”指向row.json文件。

这是我相应的控制器 -

sap.ui.controller("sam.test", {

//  onInit: function() {
//  },


//  onBeforeRendering: function() {
//
//  },

//  onAfterRendering: function() {
//
//  },

//  onExit: function() {
//
//  }


    populateItems: function(sId, oContext) {
        var row = new sap.m.ColumnListItem(sId, {
            type: "Active",
            cell: [
                   new Text({
                       text: "{Column>col1}"
                   }),
                   new Text({
                       text: "{Column>col2}"
                   }),
                   new Text({
                       text: "{Column>col3}"
                   })
            ]
        });

        return row;
    },

    populateColumns: function(sId, oContext) {
        var sColumnId = oContext.getObject().column;

        return new sap.ui.table.Column({
            id: sColumnId,
            label: sColumnId,
            template: sColumnId,
            sortProperty: sColumnId,
            filterProperty: sColumnId
        });
    }

});

然而这不起作用。它呈现的表没有列标题,也没有行。当我将行直接绑定到Table的项聚合并且还提供具有相同值的列聚合时,它可以工作。

我错过了什么吗?我很难搞清楚这一点。任何指针将不胜感激

谢谢!

1 个答案:

答案 0 :(得分:2)

我发现3个错误:

  1. 错误类型的列:new sap.ui.table.Column-正确的列类型应为 sap.m.Column ,因为这是一个sap.m.Table。
  2. 用于sap.m.ColumnListItem的错误聚合名称:正确的聚合是单元格 单元格(错字)。
  3. 错误的模型绑定到ColumnListItem:它应该是 Row&gt; col1 列&gt; col1 ,因为Row模型存储数据。
  4. 让我们纠正这些错误,下面是工作代码:

     populateItems: function(sId, oContext) {
                var row = new sap.m.ColumnListItem(sId, {
                    type: "Active",
                    cells: [
                           new sap.m.Text({
                               text: "{Row>col1}"
                           }),
                           new sap.m.Text({
                               text: "{Row>col2}"
                           }),
                           new sap.m.Text({
                               text: "{Row>col3}"
                           })
                    ]
                });
    
                return row;
            },
    
            populateColumns: function(sId, oContext) {
                var sColumnId = oContext.getObject().column;
    
                return new sap.m.Column({
                  header: new sap.m.Text({
                      text:'{Column>column}'
                  })
                });
            },
    

    让我知道这是否有效。

    enter image description here