Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sapui5 表列和行的动态绑定_Sapui5 - Fatal编程技术网

Sapui5 表列和行的动态绑定

Sapui5 表列和行的动态绑定,sapui5,Sapui5,我很难让表列和行的动态绑定正常工作 假设我有两个模型,一个保存表列信息: var aColumnData = [ { columnId : "col1" }, { columnId : "col2" }, { columnId : "col3" }, { columnId : "co

我很难让表列和行的动态绑定正常工作

假设我有两个模型,一个保存表列信息:

    var aColumnData = [
        {
            columnId : "col1"
        },
        {
            columnId : "col2"
        },
        {
            columnId : "col3"
        },
        {
            columnId : "col4"
        },
        {
            columnId : "col5"
        }
    ];
其中一个有数据:

var aData = [
    {
        col1 : "Row 1 col 1",
        col2 : "Row 1 col 2",
        col3 : "Row 1 col 3",
        col4 : "Row 1 col 4",
        col5 : "Row 1 col 5"
    },
    {
        col1 : "Row 2 col 1",
        col2 : "Row 2 col 2",
        col3 : "Row 2 col 3",
        col4 : "Row 2 col 4",
        col5 : "Row 2 col 5"
    }
];
然后我设置模型:

    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData({
        columns : aColumnData,
        rows    : aData
    });
然后在视图中创建我的表:

    var oTable = new sap.ui.table.Table();

    var oColumnTemplate = new sap.ui.table.Column({
        label : "{columnDesc}",
        template : new sap.ui.commons.TextView().bindProperty("text", "<this_should_be_dynamic_but_how?>")
    });

    oTable.bindColumns("/columns", oColumnTemplate);
    oTable.bindRows("/rows");

…但我希望使用bindColumns()/bindRows()方法会有一种更干净的方法:

我以前也做过类似的事情,请参阅与您类似的示例

var oTable = new sap.ui.table.Table({
    title: "Table column and data binding",
    showNoData : true,  
    columnHeaderHeight : 10,
    visibleRowCount: 7
});
oTable.setModel(oModel);
oTable.bindColumns("/columns", function(sId, oContext) {
    var sColumnId = oContext.getObject().columnId;
    return new sap.ui.table.Column({
        id : sColumnId,
        label: sColumnId, 
        template: sColumnId, 
        sortProperty: sColumnId, 
        filterProperty: sColumnId
    });
});
oTable.bindRows("/rows");
在这个场景中,您可以使用两个全局命名的模型,一个用于元数据,一个用于数据 乙二醇


这里有一个例子

Excellent@Jasper_07,效果很好!你是一个真正的生活和节省时间的人!:-)是否也可以修改textview模板中的一行以及链接模板中的所有其他行?@zyrex是的,在绑定模板和数据后,可以使用oTable在索引0处插入一个项。insertRow(oRow,iIndex)@Jasper_07是否有办法绑定数组格式的行而不是对象数组。此外,数组本身没有映射列。这里是我的问题:如果我使用XML视图和需要额外列的预定义表,那么这段代码有效吗?
var oTable = new sap.ui.table.Table({
    title: "Table column and data binding",
    showNoData : true,  
    columnHeaderHeight : 10,
    visibleRowCount: 7
});
oTable.setModel(oModel);
oTable.bindColumns("/columns", function(sId, oContext) {
    var sColumnId = oContext.getObject().columnId;
    return new sap.ui.table.Column({
        id : sColumnId,
        label: sColumnId, 
        template: sColumnId, 
        sortProperty: sColumnId, 
        filterProperty: sColumnId
    });
});
oTable.bindRows("/rows");
sap.ui.getCore().setModel(oMetaModel, 'meta');
sap.ui.getCore().setModel(oDataModel, 'data');
..
oTable.bindColumns("meta>/columns" function...
oTable.bindRows("data>/rows");