动态绑定sap.ui.table.Table中的行

时间:2019-01-07 09:28:56

标签: sapui5

我根据变量制作了标题,其显示方式为:Title depending on other variable in SAPUI5

我想对sap.ui.table.Table中的行做相同的操作,所以我尝试了:

rows="{= ${someData>/infos}.length > 0 ? ${someData>/infos} : ${someData>/result}}"

someData是一个ODataModel(v2)。

但是出现错误:

  

未捕获的TypeError:无法读取未定义的属性'indexOf'

2 个答案:

答案 0 :(得分:1)

错误似乎告诉您信息或结果未定义。您应该检查这些数组的当前值。

无论如何,绑定像IMHO这样的表行并不是一个好主意。 您的情况如何?

答案 1 :(得分:1)

问题

问题是您试图从一个对象确定.length。在ODataListBinding(someData>/infos)中,聚合是在对象而不是数组中解析的。因此语法无法正常工作。此外,.length语法意味着整个集合已经在客户端可用,这与sap.ui.table.Table的目的背道而驰。

使用.length进行表达式绑定仅对here所述的客户端JSONModel有意义。

替代方法

有多种方法可以动态定义聚合绑定,但是最直接的解决方案是仅访问表控件引用并动态调用bindRows。像这样:

onInit: function() {
  this.loadCountOf("SomeSet", this.bindTableRows);
  // ...
},

loadCountOf: function(entitySetName, handleCountSuccess) {
  const odataModel = /*...*/;
  odataModel.read(`/${entitySetName}/$count`, {
    success: count => handleCountSuccess.call(this, +count),
  });
},

bindTableRows: function(count) {
  this.byId("myTable").bindRows({
    path: count > 0 ? "/SomeSet" : "/TheOtherSet",
    // ...
  });
},

API reference: sap.ui.table.Table#bindRows