我根据变量制作了标题,其显示方式为: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'
答案 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",
// ...
});
},