table 内的 MultiComboxBox 在选择后关闭

MultiComboxBox within a table closes after selection

我尝试解决这个问题已经有一段时间了,但一直没有成功。

里面有一个table,我有一个sap.m.MultiComBox。选择第一个值后,多组合框中的下拉列表将关闭。如果不在 table 内,多组合框会按预期正常工作(弹出框 不会 关闭)。我观察到的另一个行为是,如果我没有 selectedKeys 绑定,那么它工作正常。

有什么理由或建议吗?

<Table
  growing="true"
  items="{employee>/EmployeeCollection}">
  <columns>
    <Column width="10%" />
    <Column width="55%" />
    <Column width="35%"/>
  </columns>
  <ColumnListItem>
    <Image id="image" src="{employee>dataURI}" class="sapOB_Assign_Usercircle" />
    <Text text="{employee>Name}" class="tableText" />
    <VBox>
      <MultiComboBox id="mcb1"
        selectedKeys="{employee>roles}"
        items="{
          path: 'roles>/BusinessRoles',
          templateShareable: false
        }">
        <core:Item key="{roles>id}" text="{roles>name}" />
      </MultiComboBox>
      <HBox />
    </VBox>
  </ColumnListItem>
</Table>

您必须在 Table 上使用 UI5 版本 1.66 或更低版本以及 growing="true"。在这种情况下,由于重新呈现列表项(其 DOM 元素被完全重写)导致焦点丢失,下拉列表会在选择后立即关闭。重新渲染本身是由 two-way 绑定 selectedKeys 引起的,这解释了为什么如果 属性 未绑定它“有效”。

通常,two-way绑定不应与growing一起使用。根据 API reference:

Note: Growing must not be used together with two-way binding.

但目前尚不清楚上述约束条件在今天是否仍然有效(参见issue #3013)。

为了保持 two-way 与 growing="true" 的绑定,将属性 key* 添加到列表绑定信息中:

<Table
  成长="true"
  项目=“{
    路径:'employee>/EmployeeCollection'<strong>,
    键:'employeeId'</strong>
  }”
>

这是一个工作示例:https://jsbin.com/ciyosir/edit?js,output。如您所见,即使在选择后下拉菜单仍保持打开状态,因为列表项不会重新呈现,这要归功于 扩展更改检测.

此外,我建议升级到最新的稳定 UI5 版本,以便受益于许多已迁移到新 semantic rendering.[=22 的控件=]


* key 等待来自模型的 属性 名称,其值是唯一的。有关详细信息,请参阅主题 Extended Change Detection.