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

问题描述 投票:1回答:2

我根据变量如何显示标题: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'

sapui5
2个回答
1
投票

问题

问题是你正试图从一个物体中确定.length。在ODataListBinding(someData>/infos)中,聚合在对象而不是数组中解析。因此语法不起作用。此外,.length语法暗示整个集合已经在客户端可用,与sap.ui.table.Table的目的相矛盾。

.length的表达式绑定只对客户端JSONModel有意义,如here所述。

替代方法

有多种方法可以动态定义聚合绑定,但最直接的解决方案是访问表控件引用并动态调用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


1
投票

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

无论如何,像IMHO那样绑定表行并不是一个好主意。你是什​​么情景?

© www.soinside.com 2019 - 2024. All rights reserved.