如何将逻辑应用于绑定聚合以动态生成子级

问题描述 投票:1回答:1

我在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"
    }),
    // ...
  ]
}));
sapui5
1个回答
1
投票

您可以使用工厂功能。

<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


When using bindItems

oTable.bindItems({
  path: "/",
  factory: this.createColumnListItem.bind(this),
  // no template!
  // ...
});

来自API reference: ManagedObject#bindAggregation

将调用的工厂函数,用于为聚合中的每个项创建对象;这是提供模板对象的替代方法,可以在对象根据绑定上下文而有所不同时使用;将使用两个参数调用工厂函数:

  • 应该用于创建对象的id,以及
  • 必须创建对象的绑定context;

该函数必须返回适合绑定聚合的对象。

© www.soinside.com 2019 - 2024. All rights reserved.