如何处理表的itemPress?

pad*_*bro 7 sapui5 sap-fiori

我写了一个XML视图.里面有一张桌子:

<Table xmlns="sap.m"
  id="myTable"
  select=""
  selectionChange=""
  swipe=""
  growingStarted=""
  growingFinished=""
  updateStarted=""
  updateFinished=""
  itemPress="console.log('clicked on item')"
>
  <columns>
    <!-- sap.m.Column -->
  </columns>
  <items>
    <!-- sap.m.ListItemBase -->
  </items>
</Table>
Run Code Online (Sandbox Code Playgroud)

我使用onInit控制器将行插入表中,但是当我单击一行时,消息不会显示.

Tim*_*ach 44

这似乎是人们在使用sap.m.ListBase相关控件时经常遇到的问题.让我概述一下如何管理事件(特别是激活它们):

这种混乱可能涉及到sap.m.ListMode的继承控制sap.m.ListBasesap.m.ListType项目继承的sap.m.ListItemBase.

我们假设以下示例列表:

<List
  selectionChange=".onSelectionChange"
  itemPress=".onItemPress"
  delete=".onDelete"
>
  <items>
    <ObjectListItem
      title="Hello ListItem"
      press=".onObjectListItemPress"
    />
  </items>
</List>
Run Code Online (Sandbox Code Playgroud)

sap.m.ListMode (Sample)

如果你正在使用sap.m.Listsap.m.Table,事件发射取决于mode你正在使用.不幸的是,没有mode属性的List/Table 不会触发任何事件!如果希望List/Table触发这些事件,则必须为其分配一个模式.例如:

<List
  mode="SingleSelect"
  ...
>
Run Code Online (Sandbox Code Playgroud)

这些是sap.m.ListMode文档中可能的模式:

无(默认)

由于没有mode分配任何属性,因此不会触发任何事件!

列表模式无

SingleSelect | SingleSelectLeft

列表控件mode="SingleSelect"在每个项目的右侧显示onSelectionChange单选按钮,并在用户单击给定的单选按钮控件时立即触发事件.使用"SingleSelectLeft"只需将单选按钮移动到项目的左侧.

列表模式SingleSelectLeft

SingleSelectMaster

列表控件mode="SingleSelectMaster"将显示鼠标悬停时的手,并onSelectionChange在单击项目时触发.

列表模式SingleSelectMaster

多选

列表控件mode="MultiSelect"提供一个复选框,并onSelectionChange在每次检查时触发事件取消选中一个项目.

列表模式MultiSelect

删除

使用列表mode="Delete"为您提供了一个很好的删除按钮并触发onDelete.

列表模式删除


sap.m.ListType (Sample)

还有一个属性你应该看看:type你的物品的属性.

每个项都继承自sap.m.ListItemBase,因此具有一个名为的属性type.让我们看看它的样子:

<items>
  <ObjectListItem
    type="Active"
    press=".onObjectListItemPress"
    detailPress=".onDetailPress"
    ...
  />
</items>
Run Code Online (Sandbox Code Playgroud)

sap.m.ListMode文档中列出了以下类型:

活性

根据具体情况mode,可以触发itemPress列表 press列表项.所选项目会突出显示,以便用户可以看到所选内容.

项目类型有效

详情

提供详细按钮(带图标sap-icon://edit),可以触发detailPress事件.

物品类型详情

DetailAndActive

顾名思义,这是Detail和Active类型的组合.因此,您可以detailPress在按钮单击时触发详细信息按钮,并且项目本身会触发列表事件itemPress.

物品类型DetailAndActive

导航

这些项目具有类似导航的外观,并且会调用itemPress项目press.

项目类型导航

待用

从项目本身调用没有项目事件.


现在让我们来看看你的问题.您应该分配表格控件a mode或指定项目a type.在那次改变之后,事件应该被解雇.

一般来说,我会避免同时使用a ListMode和a ListType,因为可能会出现意外行为,但请自行检查.