如何动态绑定sap.ui.table中的两个模型

2020-09-12 13:45发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我遇到了表绑定问题。需求就像我需要用响应的第一个索引覆盖标头,其余应该是行。

所以在这里我创建了两个JSON模型,一个用于标头,另一个用于行,

var oMetaModel = new sap.ui.model.json.JSONModel();

var oDataModel = new sap.ui.model.json.JSONModel();

var e;

this.finArray.forEach(function(item,index){

headerArray [e] = odata.results [0] [item];

e ++;

});

oMetaModel.setData({

标题:headerArray

});

this.getView()。byId(" tableId")。setModel(oMetaModel,'meta');

this.getView()。byId(" tableId")。bindColumns('meta>/headers',function(sId,oContext){

var sColumnId = oContext.getObject();

返回新的sap.ui.table.Column({标签:sColumnId,template:sColumnId});

});

这是标题表。

现在,请帮助我如何绑定ui表中的行。





         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我遇到了表绑定问题。需求就像我需要用响应的第一个索引覆盖标头,其余应该是行。

所以在这里我创建了两个JSON模型,一个用于标头,另一个用于行,

var oMetaModel = new sap.ui.model.json.JSONModel();

var oDataModel = new sap.ui.model.json.JSONModel();

var e;

this.finArray.forEach(function(item,index){

headerArray [e] = odata.results [0] [item];

e ++;

});

oMetaModel.setData({

标题:headerArray

});

this.getView()。byId(" tableId")。setModel(oMetaModel,'meta');

this.getView()。byId(" tableId")。bindColumns('meta>/headers',function(sId,oContext){

var sColumnId = oContext.getObject();

返回新的sap.ui.table.Column({标签:sColumnId,template:sColumnId});

});

这是标题表。

现在,请帮助我如何绑定ui表中的行。





付费偷看设置
发送
5条回答
愤怒的猪头君
1楼-- · 2020-09-12 14:07

将两个模型都设置为视图。

this.getView()。setModel(oMetaModel," meta");

this.getView()。setModel(oDataModel," DataModel");


您可以在XML视图中绑定模型,而不用JSON绑定吗? 然后,您可以在各自的属性中使用meta>和DataModel>来识别模型。

能不能别闹
2楼-- · 2020-09-12 14:01

Hi Luke,

请详细解释一下,但是在这里我想在控制器中做所有事情,不要在视图中做。请给我一个例子。

 var uiRow = new sap.ui.table.Row();
  对于(t.finArray中的var j){

 uiRow.addCell(new sap.m.Text({text:" {" + t.finArray [j] +"}"})));  }

 t.getView()。byId(" TableId")。bindRows("/img/results",uiRow);


 bindRows显示无数据。
 

预先感谢

Haoba3210
3楼-- · 2020-09-12 14:23

此方法有效,因此您可以根据自己的情况进行调整:

 onInit:函数(){
             this.oTable = this.getView()。byId(" tableId");
            
             var oMetaModel = new sap.ui.model.json.JSONModel({
                 标头:["产品名称","产品ID","价格"]
             });
             var oDataModel = new sap.ui.model.json.JSONModel({
                 产品:[{
                     "产品名称":"电视",
                     "产品ID":" TV1",
                     "价格":" $ 100"
                 },{
                     "产品名称":"计算机",
                     "产品ID":" TP1",
                     "价格":" $ 500"
                 },{
                     "产品名称":"汽车",
                     "产品ID":" CR1",
                     "价格":" $ 10,000"
                 }]
             });

             this.getView()。setModel(oMetaModel," MetaModel");
             this.getView()。setModel(oDataModel," DataModel");

             this.oTable.bindRows(" DataModel>/products");
            
             this.oTable.bindColumns(" MetaModel>/headers",function(sId,oContext){
                 var sLabel = oContext.getObject();
                 返回新的sap.ui.table.Column({
                     标签:新的sap.m.Label({
                         文字:sLabel
                     }),
                     模板:" DataModel>" + sLabel
                 });
             });
         } 

请注意,您的标签字符串必须与属性值匹配。 例如。 数据的"产品名称"标签必须等于"产品名称"属性。

粗暴的香蕉
4楼-- · 2020-09-12 14:17

Hi Luke,

感谢您的解决方案,但在我的案例中,HeaderNames应该是产品的第一个值(请参见上面的示例)。

请找到下面的示例图片

预先感谢

huskylover
5楼-- · 2020-09-12 14:15

在这种情况下,我建议将两个属性组合为一个模型。 您已经在其中一个数据中处理了适合您情况的数据,那么为什么不将其作为一个属性添加到另一个数据中呢?

一周热门 更多>