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

Rows binding in sap.ui.table.Table dynamically

我根据变量的显示方式制作了标题:

我想对 sap.ui.table.Table 中的行进行同样的处理,所以我尝试了:

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

someData 是一个 ODataModel (v2)。

但是出现错误:

Uncaught TypeError: Cannot read property 'indexOf' of undefined

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

无论如何,恕我直言,绑定 table 行并不是一个好主意。 你是什​​么场景?

问题

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

的目的相矛盾

.length 的表达式绑定仅对提到的客户端 JSONModel 有意义

替代方法

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

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

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