我在SAPUI5中有一个表,工作正常,显示5个信息单元格。
但是,我如何应用逻辑呢?例如,我有时需要第二个细胞是sap.m.RatingIndicator
而不是sap.m.Text
。
有没有办法提供逻辑或者必须对单元格进行硬编码?
oTable.bindItems("/", new ColumnListItem({
cells: [
new HTML({ // sap/ui/core/HTML
content: "<p style='margin:0'>{path: 'Sequence', type: 'sap.ui.model.odata.type.String', constraints: {isDigitSequence: true}}. {QuestionDesc} - <strong>{CompetencyDesc}</strong></p>"
}),
new Text({ // sap/m/Text
text: "{AnswerLabel} ({AnswerScore})",
visible: true
}),
new Image({ // sap/m/Image
src: "{SmileyUrl}",
width: "2em"
}),
// ...
]
}));
您可以使用工厂功能。
<Table items="{
path: '/',
factory: '.createColumnListItem'
}" />
createColumnListItem: function(id, context/*of the current item*/) {
const displayRatingIndicatorInstead = /*...*/;
return new ColumnListItem(id, {
cells: [
// ...
displayRatingIndicatorInstead ? new RatingIndicator() : new Text(),
// ...
]
});
},
与提供模板控件相反,工厂函数允许我们为每个迭代步骤动态地实例化新控件。
有关更多信息和示例,请查看文档主题Using Factory Functions。
bindItems
oTable.bindItems({
path: "/",
factory: this.createColumnListItem.bind(this),
// no template!
// ...
});
来自API reference: ManagedObject#bindAggregation
:
将调用的工厂函数,用于为聚合中的每个项创建对象;这是提供模板对象的替代方法,可以在对象根据绑定上下文而有所不同时使用;将使用两个参数调用工厂函数:
- 应该用于创建对象的
id
,以及- 必须创建对象的绑定
context
;该函数必须返回适合绑定聚合的对象。