我根据变量如何显示标题: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'
问题是你正试图从一个物体中确定.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",
// ...
});
},
错误似乎告诉你,信息或结果是未定义的。您应该检查这些数组的当前值。
无论如何,像IMHO那样绑定表行并不是一个好主意。你是什么情景?