【SAP UI5 控件学习】DAY04 Input组Part IV 完结List组Part I

news2024/11/24 15:21:04

1.时间选择器Time Picker

和Data Picker类似,Time Picker允许用户选择相应的时间。
在这里插入图片描述
它有以下一些比较常用的属性。

  • value用于显示Input中的时间的值,这个属性只能接受字符串的值,如果是UI5.getInstance()获取到的时间,需要转化成相应的字符串才可以
  • valueFormat用于设置显示日期的格式,这个格式会影响Input框中的格式,也会影响Time Picker显示的格式
  • placeholder用于显示提示信息
  • maskMode这个通常设置为true,这样用户就只能在输入框中输入指定格式的时间,如果输入字母等其他字符,是不可以输入进去的。

关于valueFormat的格式

  • HH24小时制的小时
  • hh12小时制的小时
  • mm分钟
  • ss
  • a12小时制的情况下使用,用于显示上午还是下午

相关事件change
当用户选择了日期后,会触发这个事件,可以在这个事件中获取到用户选择的事件

handleChange: function (oEvent) {
	var sValue = oEvent.getParameter("value"),
	MessageToast.show("The selected time is  " + sValue);
}

具体代码如下:

<mvc:View
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns:core="sap.ui.core"
	xmlns:mvc="sap.ui.core.mvc"
	xmlns:form="sap.ui.layout.form"
	xmlns="sap.m"
	xmlns:l="sap.ui.layout"
>
	<Panel
		width="auto"
		class="sapUiResponsiveMargin"
	>
		<headerToolbar>
			<OverflowToolbar>
				<Title text="maskMode"/>
			</OverflowToolbar>
		</headerToolbar>
		<content>
			<HBox alignItems="Center">
				<Text
					renderWhitespace="true"
					text="maskMode is  "
				/>
				<Switch state="{/maskMode/state}"/>
				<Text
					renderWhitespace="true"
					text="  for all TimePickers below"
				/>
			</HBox>
			<Text
				class="sapUiSmallMarginTop"
				visible="{/maskMode/state}"
				text="When maskMode is 'On', the TimePicker field accepts only the time format predefined by the mask."
			/>
			<Text
				class="sapUiSmallMarginTop"
				visible="{= !${/maskMode/state}}"
				text="When maskMode is 'Off', the users can enter anything in the TimePicker field. The field is still validated. The 'change' event returns two parameters - 'value' (that is entered) and 'valid' (true or false depending on the validity of the 'value')
					."
			/>
		</content>
	</Panel>
	<VBox class="sapUiSmallMargin">
		<Label
			class="sapUiSmallMarginTop"
			text="{/timePickers/TP1/format}"
		/>
		<TimePicker
			id="TP1"
			value="{/timePickers/TP1/value}"
			valueFormat="{/timePickers/TP1/format}"
			displayFormat="{/timePickers/TP1/format}"
			change="handleChange"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			placeholder="{/timePickers/TP1/placeholder}"
		/>
		<Label
			class="sapUiSmallMarginTop"
			text="{/timePickers/TP2/format}, showCurrentTimeButton: {/timePickers/TP2/showCurrentTimeButton}"
		/>
		<TimePicker
			id="TP2"
			valueFormat="{/timePickers/TP2/format}"
			displayFormat="{/timePickers/TP2/format}"
			showCurrentTimeButton="true"
			change="handleChange"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			placeholder="{/timePickers/TP2/placeholder}"
		/>
		<Label
			class="sapUiSmallMarginTop"
			text="hh:mm a,
				value: {/timePickers/TP3/value}"
		/>
		<TimePicker
			id="TP3"
			change="handleChange"
			value="{/timePickers/TP3/value}"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			placeholder="{/timePickers/TP3/placeholder}"
		/>
		<Label
			class="sapUiSmallMarginTop"
			text="{/timePickers/TP4/format}"
		/>
		<TimePicker
			id="TP4"
			valueFormat="{/timePickers/TP4/format}"
			displayFormat="{/timePickers/TP4/format}"
			change="handleChange"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			placeholder="{/timePickers/TP4/placeholder}"
		/>
		<Label
			class="sapUiSmallMarginTop"
			text="{/timePickers/TP5/format}, initialFocusedDateValue: {/timePickers/TP5/initialFocusedDateValue}"
		/>
		<TimePicker
			id="TP5"
			valueFormat="{/timePickers/TP5/format}"
			displayFormat="{/timePickers/TP5/format}"
			change="handleChange"
			initialFocusedDateValue="{/timePickers/TP5/initialFocusedDateValue}"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			placeholder="{/timePickers/TP5/placeholder}"
		/>
		<Label
			class="sapUiSmallMarginTop"
			text="{/timePickers/TP6/format}, support2400: {/timePickers/TP6/support2400} (for cases where 24:00:00 indicates the end of the day)"
		/>
		<TimePicker
			id="TP6"
			valueFormat="{/timePickers/TP6/format}"
			displayFormat="{/timePickers/TP6/format}"
			change="handleChange"
			support2400="{/timePickers/TP6/support2400}"
			maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
			value="{/timePickers/TP6/value}"
			placeholder="{/timePickers/TP6/placeholder}"
		/>
		<Toolbar class="sapUiSmallMarginTop">
			<content>
				<Title text="change event result"/>
			</content>
		</Toolbar>
		<Text
			id="T1"
			class="sapUiSmallMarginTop"
		/>
	</VBox>
</mvc:View>

值得注意的两个细节

1. TP3的value为什么需要使用格式化器?

根据提供的代码和JSON Model,Id为TP3的元素的value属性为UI5Date.getInstance(),这里使用的是一个UI5的日期实例。然而,UI5的日期实例并不能直接在界面上显示,因为它不是一个可显示的字符串。

要在界面上显示日期值,需要将日期实例转换为字符串格式,以便TimePicker能够正确显示。你可以使用格式化器(Formatter)或者绑定到另一个字符串属性来实现。

使用格式化器的示例:
在控制器中定义一个格式化函数:

formatDate: function(value) {
    if (value instanceof Date) {
        var oDateFormat = sap.ui.core.format.DateFormat.getDateTimeInstance({ pattern: "yyyy-MM-dd" });
        return oDateFormat.format(value);
    }
    return value;
}

然后在XML视图中的TimePicker控件中使用格式化器:

<TimePicker
    id="TP3"
    change="handleChange"
    value="{
        path: '/timePickers/TP3/value',
        formatter: '.formatDate'
    }"
    maskMode="{= ${/maskMode/state} ? 'On' : 'Off'}"
    placeholder="{/timePickers/TP3/placeholder}"
/>

这样可以将日期实例转换为指定格式的字符串,并显示在界面上。

另一种方法是在JSON Model中添加一个新的属性,用于存储日期的字符串格式。在更新日期时,同时更新这个字符串属性,并绑定到TimePicker的value属性。

希望这能帮到你解决问题。如果还有其他疑问,请随时提问。

2. 那TP5对应的VALUE也是UI5Date.getInstance(),为什么不需要格式化器

TP5对应的VALUE也是UI5Date.getInstance(2017, 8, 9, 10, 11, 12),在这种情况下不需要使用格式化器的原因是因为TP5指定了initialFocusedDateValue属性,该属性接受一个UI5日期实例作为初始值,并且TimePicker控件会自动将其转换为正确的显示格式。

initialFocusedDateValue属性用于在打开TimePicker时设置初始的选定日期和时间。UI5会自动将UI5日期实例转换为适当的显示格式,并在TimePicker控件中显示。

因此,对于TP5,你无需使用格式化器,因为TimePicker会自动处理日期实例的显示。

希望这解答了你的疑问。如果还有其他问题,请随时提问。

2.Action List控件

Action List控件可以用于显示一系列的按钮操作聚合在一起,方便用户选择和使用。
在这里插入图片描述
具体代码如下:

<mvc:View
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns:core="sap.ui.core"
	xmlns:mvc="sap.ui.core.mvc"
	xmlns:form="sap.ui.layout.form"
	xmlns="sap.m"
	xmlns:l="sap.ui.layout"
>
	<Button
		text="Open Action Sheet"
		class="sapUiSmallMargin"
		press=".onButtonPress"
		ariaHasPopup="Menu" >
		<dependents>
			<core:Fragment
				fragmentName="sap.ui5.walkthrough.view.ValueHelpDialog"
				type="XML" />
		</dependents>
	</Button>
</mvc:View>
<ActionSheet id="actionSheet"
	xmlns="sap.m"
	xmlns:core="sap.ui.core"
	core:require="{ MessageToast: 'sap/m/MessageToast' }"
	title="Choose Your Action"
	showCancelButton="true"
	placement="Bottom"
	showScrollbar="false">
	<Button
		text="Accept"
		icon="sap-icon://accept"
		press="handleButtonPress" />
	<Button
		text="Reject"
		icon="sap-icon://decline"
		press="handleButtonPress" />
	<Button
		text="Email"
		icon="sap-icon://email"
		press="handleButtonPress" />
	<Button
		text="Forward"
		icon="sap-icon://forward"
		press="handleButtonPress" />
	<Button
		text="Delete"
		icon="sap-icon://delete"
		press="handleButtonPress" />
	<Button
		text="Other"
		press="handleButtonPress" />
</ActionSheet>
sap.ui.define([
	'sap/ui/core/mvc/Controller',
	'sap/ui/model/json/JSONModel',
	"sap/ui/core/Core",
	"sap/ui/core/library",
	"sap/ui/unified/DateTypeRange",
	"sap/ui/core/date/UI5Date",
	'sap/m/MessageToast',
	"sap/ui/core/Fragment",
	"sap/ui/model/Filter",
	"sap/ui/model/FilterOperator",
], function (Controller,
	JSONModel,
	Core,
	library,
	DateTypeRange,
	UI5Date,
	MessageToast,
	Fragment,
	Filter,
	FilterOperator,
	) {
	"use strict";

	return Controller.extend("sap.ui5.walkthrough.controller.App", {
	
		onButtonPress: function(oEvent) {
			var oButton = oEvent.getSource();
			this.byId("actionSheet").openBy(oButton);
		},

		handleButtonPress: function(oEvent) {
			var oButton = oEvent.getSource();
			var sButtonText = oButton.getText();
			MessageToast.show('Selected action is ' + sButtonText);
		}
		
	});
});

3.NavigationList控件

这个控件用于实现导航栏,还提供了各种特效。
在这里插入图片描述
在这里插入图片描述
具体代码如下:

<mvc:View
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns="sap.m"
	xmlns:mvc="sap.ui.core.mvc"
	xmlns:tnt="sap.tnt"
	height="100%"
>
	<OverflowToolbar>
		<Button
			text="Toggle Collapse/Expand"
			icon="sap-icon://menu2"
			press=".onCollapseExpandPress"
		/>
		<Button
			text="Show/Hide SubItem 3"
			icon="sap-icon://menu2"
			press=".onHideShowSubItemPress"
		/>
	</OverflowToolbar>
	<tnt:NavigationList
		id="navigationList"
		width="320px"
		selectedKey="subItem3"
	>
		<tnt:NavigationListItem
			text="Item 1"
			key="rootItem1"
			icon="sap-icon://employee"
		>
			<tnt:NavigationListItem text="Sub Item 1" select="onPress"/>
			<tnt:NavigationListItem text="Sub Item 2" />
			<tnt:NavigationListItem
				text="Sub Item 3"
				id="subItemThree"
				key="subItem3"
			/>
			<tnt:NavigationListItem text="Sub Item 4"/>
			<tnt:NavigationListItem
				text="Invisible Sub Item 5"
				visible="false"
			/>
			<tnt:NavigationListItem
				text="Invisible Sub Item 6"
				visible="false"
			/>
		</tnt:NavigationListItem>
		<tnt:NavigationListItem
			text="Invisible Section"
			icon="sap-icon://employee"
			visible="false"
		>
			<tnt:NavigationListItem text="Sub Item 1"/>
			<tnt:NavigationListItem text="Sub Item 2"/>
			<tnt:NavigationListItem text="Sub Item 3"/>
			<tnt:NavigationListItem text="Sub Item 4"/>
		</tnt:NavigationListItem>
		<tnt:NavigationListItem
			text="Item 2"
			icon="sap-icon://building"
		>
			<tnt:NavigationListItem text="Sub Item 1"/>
			<tnt:NavigationListItem text="Sub Item 2"/>
			<tnt:NavigationListItem text="Sub Item 3"/>
			<tnt:NavigationListItem text="Sub Item 4"/>
		</tnt:NavigationListItem>
	</tnt:NavigationList>
</mvc:View>

如果想实现点击某一个Item会执行某一个事件,请使用select事件
例如

<tnt:NavigationListItem text="Sub Item 1" select="onPress"/>
sap.ui.define([
	'sap/ui/core/mvc/Controller',
	'sap/ui/model/json/JSONModel',
	"sap/ui/core/Core",
	"sap/ui/core/library",
	"sap/ui/unified/DateTypeRange",
	"sap/ui/core/date/UI5Date",
	'sap/m/MessageToast',
	"sap/ui/core/Fragment",
	"sap/ui/model/Filter",
	"sap/ui/model/FilterOperator",
], function (Controller,
	JSONModel,
	Core,
	library,
	DateTypeRange,
	UI5Date,
	MessageToast,
	Fragment,
	Filter,
	FilterOperator,
) {
	"use strict";

	return Controller.extend("sap.ui5.walkthrough.controller.App", {

		onCollapseExpandPress: function () {
			var oNavigationList = this.byId("navigationList");
			// 获取导航栏是否是Expand,然后取反即可
			var bExpanded = oNavigationList.getExpanded();

			oNavigationList.setExpanded(!bExpanded);
		},

		onHideShowSubItemPress: function () {
			var oNavListItem = this.byId("subItemThree");
			oNavListItem.setVisible(!oNavListItem.getVisible());
		},

		onPress: function (oEvent) {
			var text = oEvent.getSource().getText();
			MessageToast.show(text + " is selected");
		}

	});
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 基…

LayUI 实现二级导航栏

目录 实现步骤&#xff1a; 1. 分析数据库 2. 构建数据源 2.1 编写实体类 2.2 编写节点实体类 2.3 构建BuildTree节点结构方法类 2.4 编写dao类 2.5 编写数据Acntion控制类 3. 前台准备 3.1 配置mvc.xml文件 3.2 页面编写 3.3 运行效果 实现步骤&#xff1a; 1. 分…

鼠标右击没有新建WORD、EXCEL、PPT选项卡解决方案

一、WinR打开运行窗口&#xff0c;输入regedit打开注册表 二、进入到相应位置&#xff0c;复制粘贴到路径处即可 ①word word&#xff1a;计算机\HKEY_CLASSES_ROOT\.docx 计算机\HKEY_CLASSES_ROOT\.doc 看你改哪个都行&#xff0c;我觉得修改第一个docx那个就行&#xff0c…

请求响应-路径参数的接收

目录 路径参数 单个路径参数地获取 多个路径参数地获取 路径参数 路径参数&#xff1a;通过URL直接传递参数&#xff0c;即参数是请求路径的一部分&#xff0c;Controller类中使用{参数名}来标识该路径参数&#xff0c;需要使用PathVarible获取路径参数 单个路径参数地获取…

密码学入门——HMAC

文章目录 一、什么是HMAC二、HMAC的步骤 一、什么是HMAC HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104)&#xff0c;其中 HMAC的H就是Hash的意思。 HMAC 中所使用的单向散列函数并不仅限于一种&#xff0c;任何高强度的单向散列函数都可以被用于HMAC&#xff0…

基于深度学习的高精度深海鱼检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度深海鱼检测识别系统可用于检测与定位深海鱼目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的深海鱼目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集&a…

NTP 时间戳和RTP时间戳的差异

1&#xff0c;RTP RTP全称是Real-time Transport Protocol&#xff08;实时传输协议&#xff09;&#xff0c;它是IETF提出的一个标准&#xff0c;对应的RFC文档为RFC3550。一般用其承载实时性要求很高的数据形成RTP包&#xff0c;在语音通信中&#xff0c;把PCM数据编码后得到…

微服务是SOA,微服务也不是SOA

文章目录 一、什么是SOA&#xff1f; 什么是微服务&#xff1f;SOA 和微服务的区别 公众号&#xff1a; MCNU云原生&#xff0c;文章首发地&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&#xff0c;第一时间掌握&#xff01; 本文源自一次面试官的提问&#xff1a;你觉得…

和数链技术强化数字资产上链保护,确权打造数字数字资产重要防线

在互联网时代&#xff0c;版权侵权行为猖獗&#xff0c;短视频、摄影作品、电商产品详情页等频遭盗用、篡改、抄袭&#xff0c;甚至私自售卖他人的网课录屏。这些侵权行为严重扰乱市场秩序&#xff0c;严重危害了创作者的积极性。而知识产权案件的立案难、取证难、维权成本高、…

MyBatis实现动态SQL更新

博主记得在一个周五快下班的下午&#xff0c;产品找到我&#xff08;为什么总感觉周五快下班就来活 &#x1f602;&#xff09;&#xff0c;跟我说有几个业务列表查询需要加上时间条件过滤数据&#xff0c;这个条件可能会变&#xff0c;不保证以后不修改&#xff0c;这个改动涉…

Spring Boot 有哪些特点?

目录 一、自动配置 二、嵌入式 Tomcat Web 服务器 三、入门 POM 四、Actuator执行器 API 五、SpringBoot初始化器 一、自动配置 Spring Boot的自动配置是Spring Boot框架提供的一种功能&#xff0c;它可以根据用程序的依赖和配置信息&#xff0c;自动配置一些常见的功能模…

PyTorch模型容器与AlexNet构建

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 模型容器与AlexNet构建nn.Sequetial总结 nn.ModuleListnn.ModuleDict容器总结AlexNet实现 模型容器与AlexNet构建 …

解决固态硬盘只显示一半容量的好方法,解放隐藏的存储空间!

硬盘只显示一半容量”! “几天前&#xff0c;我的闪迪固态硬盘出现了一些奇怪的事情&#xff0c;这是个500GB的硬盘&#xff0c;但系统没有显示全部容量&#xff0c;只显示了250GB。这是什么原因&#xff1f;我该怎么办呢&#xff1f;如果大家有解决过类似问题&#xff0c;请…

使用SpringBoot+React搭建一个Excel报表平台

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 Excel报表平台是一款功能强大、操作简单的系统平台&#xff0c;可以帮助用户上传…

海量倾斜摄影模型数据web端上传发布,在线浏览、在线分享,你还不知道吗?

倾斜摄影模型突出的特点就是数据量较大&#xff0c;这是由其高精度、对地表全覆盖的真实影像所决定的。如何将海量倾斜摄影模型数据加载到地图中并进行在线浏览是行业用户一直关心的内容&#xff0c;现在通过「四维轻云」就可以实现地理空间数据的在线管理、编辑及分享。 1、倾…

青岛大学_王卓老师【数据结构与算法】Week05_04_案例引入_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

第二章:在html中使用javascript

1、在html页面中插入js的主要方法就是使用<script>元素 2、html4.01为<script>定义了以下6个属性&#xff1a;【language已经废弃&#xff0c;其他5个属性都是可选的】 async 表示应该立即下载脚本&#xff0c;但不应该妨碍页面中的其他操作&#xff0c;比如下载…

.NET Core 数据库DB First自动生成,Sqlite,sql server,Mysql

文章目录 前言数据库ORM代码自动添加前期准备安装Nuget Sql serverMysqlSqlite查询结果 前言 .NET Core是C# .NET 未来发展的必然趋势&#xff0c;C# 要像Java一样跨平台运行。这里解决一个.NET core 会遇到的问题&#xff0c;如何添加ORM框架。 ORM是数据库对象映射关系模型…

Anaconda的安装和配置

对于自学Python的小伙伴来说&#xff0c;在刚开始&#xff0c;我们就得要安装Python以及python的库&#xff0c;但是我们可以通过安装Anaconda很好地解决这一难题&#xff0c;给我们初学者节省很多令人头疼的环境安装问题&#xff0c;今天我就为大家分享下Anaconda的介绍&#…

什么是加密领域的 Web 3.0?

随着科技的不断进步和互联网的发展&#xff0c;我们正逐渐迈入数字经济时代。在这个时代中&#xff0c;加密领域的Web 3.0成为了一个备受关注的话题。从区块链技术到加密货币&#xff0c;从去中心化应用程序到智能合约&#xff0c;这些新兴技术正在改变着我们对互联网的认知。本…