SAPUI5 - 带有工厂函数的 sap.m.Table 不显示列和项目

Posted

技术标签:

【中文标题】SAPUI5 - 带有工厂函数的 sap.m.Table 不显示列和项目【英文标题】:SAPUI5 - sap.m.Table with factory functions not showing columns and items 【发布时间】:2016-12-23 12:57:50 【问题描述】:

我有一个要求,我必须从 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】:

我发现的 3 个错误:

    错误的列类型:新的 sap.ui.table.Column - 正确的列类型应该是 sap.m.Column,因为这是一个 sap.m.Table。 用于 sap.m.ColumnListItem 的聚合名称错误:正确的聚合是 cellsnot cell(错字)。李> 错误的模型绑定到 ColumnListItem:它应该是 Row>col1不是 Column>col1 因为 Row 模型存储数据。

让我们纠正这些错误,下面是工作代码:

 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'
              )
            );
        ,

让我知道这是否有效。

【讨论】:

以上是关于SAPUI5 - 带有工厂函数的 sap.m.Table 不显示列和项目的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个函数触发选择事件 [SAPUI5]

SAPUI5:通过 setVisibility 隐藏 <List> 不起作用

使用数据绑定从SAPUI5多输入字段中删除令牌

SAPUI5 / OPENUI5 javascript视图HTML元素渲染

SAPUI5 addEventListener在加载时调用函数而不是在声明的事件上调用

带有工厂功能的Vue组件v-for