我写了一个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.ListBase
和sap.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.List
或sap.m.Table
,事件发射取决于mode
你正在使用.不幸的是,没有mode
属性的List/Table 不会触发任何事件!如果希望List/Table触发这些事件,则必须为其分配一个模式.例如:
<List
mode="SingleSelect"
...
>
Run Code Online (Sandbox Code Playgroud)
这些是sap.m.ListMode
文档中可能的模式:
由于没有mode
分配任何属性,因此不会触发任何事件!
列表控件mode="SingleSelect"
在每个项目的右侧显示onSelectionChange
单选按钮,并在用户单击给定的单选按钮控件时立即触发事件.使用"SingleSelectLeft"
只需将单选按钮移动到项目的左侧.
列表控件mode="SingleSelectMaster"
将显示鼠标悬停时的手,并onSelectionChange
在单击项目时触发.
列表控件mode="MultiSelect"
提供一个复选框,并onSelectionChange
在每次检查时触发事件并取消选中一个项目.
使用列表mode="Delete"
为您提供了一个很好的删除按钮并触发onDelete
.
还有一个属性你应该看看: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
事件.
顾名思义,这是Detail和Active类型的组合.因此,您可以detailPress
在按钮单击时触发详细信息按钮,并且项目本身会触发列表事件itemPress
.
这些项目具有类似导航的外观,并且会调用itemPress
项目press
.
从项目本身调用没有项目事件.
现在让我们来看看你的问题.您应该分配表格控件a mode
或指定项目a type
.在那次改变之后,事件应该被解雇.
一般来说,我会避免同时使用a ListMode
和a ListType
,因为可能会出现意外行为,但请自行检查.