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

Sapui5 sap.ui.table.table中的行动态绑定,sapui5,Sapui5,我根据变量的显示方式制作了一个标题: 我想对sap.ui.table.table中的行进行同样的操作,因此我尝试: rows="{= ${someData>/infos}.length > 0 ? ${someData>/infos} : ${someData>/result}}" 而someData是ODataModel(v2) 但有一个错误: 未捕获的TypeError:无法读取未定义的属性“indexOf” 这些错误似乎告诉您infos或result未定义

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

我想对
sap.ui.table.table
中的行进行同样的操作,因此我尝试:

rows="{= ${someData>/infos}.length > 0 ? ${someData>/infos} : ${someData>/result}}"
someData
是ODataModel(v2)

但有一个错误:

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


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

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

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

使用
.length
的表达式绑定仅适用于前面提到的客户端JSONModel

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

onInit:function(){
this.loadCountOf(“SomeSet”,this.bindTableRows);
// ...
},
loadCountOf:函数(entitySetName,handleCountSuccess){
constodatamodel=/*…*/;
odataModel.read(`/${entitySetName}/$count`{
success:count=>handleCountSuccess.call(this,+count),
});
},
bindTableRows:函数(计数){
这个.byId(“myTable”).bindRows({
路径:计数>0?/SomeSet:“/TheOtherSet”,
// ...
});
},

它不是空的,因为当我这样做时:
{someData>/infos}
它就工作了,只是不能用三元运算符。我通常有两个数组,其中一个总是空的,所以我检查了长度,我知道使用哪一个。这个场景真的很奇怪。这种绑定(项聚合)可能不支持三元运算符,但它适用于“正常”绑定。为什么有两个不同的源来显示项目?我从外部源获取该模型。有时我必须使用
infos
array,有时我必须使用
result
array。那么语法是正确的,它应该工作吗?是的,语法应该是正确的。我认为问题在于对聚合使用这种绑定。尝试将这种逻辑转移到控制器端(我知道,我不是这个解决方案的超级粉丝)。因此,获取数据,检查哪一个不是空的,并将其分配给模型的属性并使用它。将列表设置为忙碌,直到获得这些信息,然后删除忙碌状态。