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",
// ...
});
},
我根据变量的显示方式制作了标题:
我想对 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",
// ...
});
},