【SAP UI5 控件学习】DAY01 Input组Part I

news2024/11/23 20:04:13

UI5常用控件

1.Input组

1.1 Feed Input控件

这个控件通常是用来显示发布评论的。它可以显示用户头像,并且在内容输入方面,可以设置PlaceHolder,自增扩展大小,限制行数,以及限制字数等诸多设置。

1.1.1 没有头像的输入框

在这里插入图片描述

对应的代码

<mvc:View
	xmlns:mvc="sap.ui.core.mvc"
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns="sap.m"
	displayBlock="true        "
>
    <Label text="Without Icon Feed Input" class="sapUiSmallMarginTop sapUiTinyMarginBottom" />
	<FeedInput post="onPost" showIcon="false" />
</mvc:View>
sap.ui.define(['sap/m/MessageToast','sap/ui/core/mvc/Controller'],
	function(MessageToast, Controller) {
	"use strict";
	var CController = Controller.extend("sap.ui5.walkthrough.controller.App", {
		onPost: function (oEvent) {
			var sValue = oEvent.getParameter("value");
			MessageToast.show("Posted new feed entry: " + sValue);
		}
	});
	return CController;
});

注意:当在前端点击发送按钮后,会触发onPost事件,后端通过获取oEvent.getParameter("value")来获取到前端输入的内容

1.1.2 带有Icon Placeholder的输入框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2klpH8cM-1688522000229)(file://C:\Users\CN0YXNL\AppData\Roaming\marktext\images\2023-07-05-08-29-35-image.png?msec=1688516975920)]

只需要将showIcon的属性设置为true即可

<FeedInput post="onPost" showIcon="true" />

1.1.3 带有图像的输入框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-616XcmZa-1688522000229)(file://C:\Users\CN0YXNL\AppData\Roaming\marktext\images\2023-07-05-08-33-58-image.png?msec=1688517238905)]

只需要设置icon属性即可

<FeedInput post="onPost" showIcon="true" icon="test-resources/sap/m/images/george_washington.jpg" />

1.1.4 指定输入框的行数

只需设置rows属性即可,这里的5行并不是说只能输入5行,而是输入框的大小被设定到5行

<FeedInput post="onPost" showIcon="true" rows="5"/>

1.1.5 有字数限制的输入框

需要设置maxLengthshowExceededText属性。这样在输入框的右下角就会提示是否超过输入限制。这个和上面的一样,即使超过输入的限制也可以继续输入,并且在js代码中也可以获取到输入的所有内容

在这里插入图片描述
在这里插入图片描述

<FeedInput post="onPost" showIcon="true" maxLength="20" showExceededText="true" />

1.1.6 根据内容自增大小的输入框

只需要设置growing属性为true即可,默认最小大小,如果输入内容过多,则变大

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zQJMWvJ6-1688522000233)(file://C:\Users\CN0YXNL\AppData\Roaming\marktext\images\2023-07-05-08-46-29-image.png?msec=1688517989644)]

1.2 实现完整的评论发送和显示功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-stGjFnoW-1688522000233)(file://C:\Users\CN0YXNL\AppData\Roaming\marktext\images\2023-07-05-09-13-21-image.png?msec=1688519601975)]

xml页面代码

<mvc:View
	xmlns:mvc="sap.ui.core.mvc"
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns="sap.m"
	displayBlock="true"
>
	<FeedInput post="onPost" showIcon="true" growing="true" />
	<List
		showSeparators="Inner"
		items="{/EntryCollection}" >
			<FeedListItem
				sender="{Author}"
				icon="{AuthorPicUrl}"
				senderPress="onSenderPress" 
				iconPress="onIconPress" 
				iconDensityAware="false"
				info="{Type}"
				timestamp="{Date}"
				text="{Text}"
				convertLinksToAnchorTags="All"
			/>
	</List>
</mvc:View>

前端界面使用<List>控件作为保存评论信息的容器,并绑定JSON模型。每一条信息使用<FeedListItem>来展示,可以设置发送人的信息,并称等诸多信息。

js代码

sap.ui.define(["sap/m/MessageToast", "sap/ui/core/format/DateFormat", "sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel"],
	function(MessageToast, DateFormat, Controller, JSONModel) {
	"use strict";
	var CController = Controller.extend("sap.ui5.walkthrough.controller.App", {
		onInit: function() {
			// set mock model
			var oModel = new JSONModel({
				"EntryCollection" : [{
					"Author" : "Alexandrina Victoria",
					"AuthorPicUrl" : "test-resources/sap/m/images/dronning_victoria.jpg",
					"Type" : "Request",
					"Date" : "March 03 2013",
					"Text" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, seddiamnonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
				}, {
					"Author" : "George Washington",
					"AuthorPicUrl" : "test-resources/sap/m/images/george_washington.jpg",
					"Type" : "Reply",
					"Date" : "March 04 2013",
					"Text" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore"
				}, {
					"Author" : "Alexandrina Victoria",
					"AuthorPicUrl" : "test-resources/sap/m/images/dronning_victoria.jpg",
					"Type" : "Request",
					"Date" : "March 05 2013",
					"Text" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat"
				}, {
					"Author" : "George Washington",
					"AuthorPicUrl" : "test-resources/sap/m/images/george_washington.jpg",
					"Type" : "Rejection",
					"Date" : "March 07 2013",
					"Text" : "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."
				}]
			});
			this.getView().setModel(oModel);
		},

		onPost: function(oEvent) {
			var oFormat = DateFormat.getDateTimeInstance({ style: "medium" });
			var oDate = new Date();
			var sDate = oFormat.format(oDate);
			// create new entry
			var sValue = oEvent.getParameter("value");
			var oEntry = {
				Author: "Alexandrina Victoria",
				AuthorPicUrl: "https://tse1-mm.cn.bing.net/th/id/OIP-C.SzTNhdOKQsQ9LGhpAy5_XwHaHI?pid=ImgDet&rs=1",
				Type: "Reply",
				Date: "" + sDate,
				Text: sValue
			};

			// update model 
            // 这一段更新JSON数据的操作值得学习
			var oModel = this.getView().getModel();
			var aEntries = oModel.getData().EntryCollection;
			aEntries.unshift(oEntry);
			oModel.setData({
				EntryCollection: aEntries
			});
		},

		onSenderPress: function(oEvent) {
			MessageToast.show("Clicked on Link: " + oEvent.getSource().getSender());
		},

		onIconPress: function(oEvent) {
			MessageToast.show("Clicked on Image: " + oEvent.getSource().getSender());
		}
	});
	return CController;
});

因此,aEntries.unshift(oEntry);表示将 oEntry 添加到 aEntries 数组的开头。这将导致原有的元素向后移动,并在数组的索引位置0处插入 oEntry 元素。

1.2 FeedListItem控件

通常情况下,Item控件需要结合List控件一起使用。一个List包含多个Item控件。通过JSON对象数据绑定的方式显示数据。Item中可以包含很多的属性,如下面的JSON对象所示:

{
			"Author": "Alexandrina Victoria",
			"AuthorPicUrl": "test-resources/sap/m/images/dronning_victoria.jpg",
			"Type": "Request",
			"Date": "March 03 2013",
			"Actions": [
				{
					"Text": "Delete",
					"Icon": "sap-icon://delete",
					"Key": "delete"
				},
				{
					"Text": "Share",
					"Icon": "sap-icon://share-2",
					"Key": "share"
				},
				{
					"Text": "Edit",
					"Icon": "sap-icon://edit",
					"Key": "edit"
				}
			],
			"Text": "Lorem <strong>ipsum dolor sit amet</strong>, <em>consetetur sadipscing elitr</em>, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, <a href='http://www.sap.com'>sed diam voluptua</a>. At vero eos et accusam et justo duo dolores et ea rebum.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod <strong>tempor invidunt ut labore et dolore magna</strong> aliquyam erat, sed diam voluptua. <em>At vero eos et accusam et justo</em> duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, seddiamnonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, <u>sed diam nonumy eirmod tempor invidunt ut labore</u> et dolore magna aliquyam erat, sed diam voluptua. <strong>At vero eos et accusam</strong> et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod <a href='//www.sap.com'>tempor invidunt</a> ut labore et dolore magna aliquyam erat, sed diam voluptua. <em>At vero eos et accusam</em> et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum."
		}

其中Actions是这一条item可以包含按钮,用于进行不同的操作,如下图所示:

在这里插入图片描述

在js中通过判断不同actions的key即可区分不同的按钮按下,并为不同的按钮按下编写自定义的代码。

onActionPressed: function(oEvent) {
			var sAction = oEvent.getSource().getKey();
		
			if (sAction === "delete") {
				this.removeItem(oEvent.getParameter("item"));
				MessageToast.show("Item deleted");
			} else {
				MessageToast.show("Action \"" + sAction + "\" pressed.");
			}
		},
		
		removeItem: function(oFeedListItem) {
			// 如果删除第一个元素,那么sFeedListItemBindingPath的值为"/EntryCollection/0" 要删除的元素的下标是0,因此需要将数组进行以/进行拆分,获取最后一个数组元素,也就是0
			var sFeedListItemBindingPath = oFeedListItem.getBindingContext().getPath();
			// 而 pop() 方法是 JavaScript 数组的一个方法,用于删除并返回数组的最后一个元素 
			var sFeedListItemIndex = sFeedListItemBindingPath.split("/").pop();
			var aFeedCollection = this.getView().getModel().getProperty("/EntryCollection");
		
			aFeedCollection.splice(sFeedListItemIndex, 1); // 从下标sFeedListItemIndex开始删除,删除1个元素
			this.getView().getModel().setProperty("/EntryCollection", aFeedCollection);
		}

需要注意的是:如果要使用Actions功能,需要在Item里面添加相关的一些代码

<List
	showSeparators="Inner"
	items="{/EntryCollection}" >
		<FeedListItem
			sender="{Author}"
			icon="{AuthorPicUrl}"
			senderPress="onSenderPress" 
			iconPress="onIconPress" 
			iconDensityAware="false"
			info="{Type}"
			timestamp="{Date}"
			text="{Text}"
			convertLinksToAnchorTags="All"
			actions="{path: 'Actions', templateShareable: false}">
		    <FeedListItemAction text="{Text}" icon="{Icon}" key="{Key}" press="onActionPressed" />
		</FeedListItem>
</List>

1.3 Label控件

可以通过设置相关的的属性对Label的格式进行一些设计

在这里插入图片描述

<mvc:View
	xmlns:mvc="sap.ui.core.mvc"
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns="sap.m"
	displayBlock="true"
>
	<Label text="Label A (required)" labelFor="input-a" />
	<Input id="input-a" required="true" />

	<Label
		text="Label B (bold)"
		labelFor="input-b"
		design="Bold" />
	<Input id="input-b" />

	<Label text="Label C (normal)" labelFor="input-c" />
	<Input id="input-c" />
</mvc:View>

使用form:SimpleForm控件可以更加友好的显示Label和Input控件,如下图所示

在这里插入图片描述

<mvc:View
	xmlns:mvc="sap.ui.core.mvc"
	controllerName="sap.ui5.walkthrough.controller.App"
	xmlns="sap.m"
	xmlns:form="sap.ui.layout.form"
>
	<form:SimpleForm
		layout="ResponsiveGridLayout"
		editable="true"
		adjustLabelSpan="false"
		labelSpanXL="2"
		labelSpanL="2"
		labelSpanM="2"
		labelSpanS="5">
		<Label text="Display Only" />
		<Label text="Label A (required)" labelFor="input-a" />
		<Input id="input-a" required="true" />

		<Label
			text="Label B (bold)"
			labelFor="input-b"
			design="Bold" />
		<Input id="input-b" />

		<Label text="Label C (normal)" labelFor="input-c" />
		<Input id="input-c" />
	</form:SimpleForm>
</mvc:View>

1.4 Input List Item 控件

通过这个控件可以更加标准化的显示多种Input控件

<mvc:View
	xmlns:l="sap.ui.layout"
	xmlns:core="sap.ui.core"
	xmlns:mvc="sap.ui.core.mvc"
	xmlns="sap.m"
	controllerName="sap.ui5.walkthrough.controller.App"
	displayBlock="true"
>
<List
		headerText="Input" >
		<InputListItem label="WLAN">
			<Switch state="true" />
		</InputListItem>
		<InputListItem label="Flight Mode">
			<CheckBox selected="true" />
		</InputListItem>
		<InputListItem label="High Performance">
			<RadioButton
				groupName="GroupInputListItem"
				selected="true" />
		</InputListItem>
		<InputListItem label="Battery Saving">
			<RadioButton
				groupName="GroupInputListItem" />
		</InputListItem>
		<InputListItem label="Price (EUR)">
			<Input
				placeholder="Price"
				value="799"
				type="Number" />
		</InputListItem>
		<InputListItem label="Address">
			<Input
				placeholder="Address"
				value="Main Rd, Manchester" />
		</InputListItem>
		<InputListItem label="Country">
			<Select>
				<core:Item key="GR" text="Greece" />
				<core:Item key="MX" text="Mexico" />
				<core:Item key="NO" text="Norway" />
				<core:Item key="NZ" text="New Zealand" />
				<core:Item key="NL" text="Netherlands" />
			</Select>
		</InputListItem>
		<InputListItem label="Volume">
			<Slider min="0" max="10" value="7" width="200px" />
		</InputListItem>
	</List>
</mvc:View>

在这里插入图片描述

需要注意的是RadioButton实现互斥的方式是设置名称相同的GroupName

1.5 二维码扫描控件

可以通过Barcode Scanner Button控件实现对二维码的扫描
在这里插入图片描述
前端代码如下:

<mvc:View
		controllerName="sap.ui5.walkthrough.controller.App"
		height="100%"
		xmlns:mvc="sap.ui.core.mvc"
		xmlns:ndc="sap.ndc"
		xmlns="sap.m">
	<VBox class="sapUiSmallMargin">
		<ndc:BarcodeScannerButton
			id="sampleBarcodeScannerButton"
			scanSuccess="onScanSuccess"
			scanFail="onScanError"
			inputLiveUpdate="onScanLiveupdate"
			dialogTitle="Barcode Scanner Button Sample" 
		/>
		<HBox class="sapUiTinyMarginTop">
			<Label text="Scan Result:"/>
			<Text id="sampleBarcodeScannerResult" text="" class="sapUiTinyMarginBegin"/>
		</HBox>
	</VBox>
</mvc:View>

关于HBox和VBox 在SAPUI5(UI5)中,VBoxHBox 是布局容器控件,用于在垂直方向和水平方向上排列其他控件。

VBox
表示垂直盒子布局容器,它按照从上到下的顺序垂直排列子控件。子控件按照添加的顺序依次排列,每个子控件占据一行。可以通过设置属性来控制子控件的布局行为,例如
flexGrow 属性用于定义子控件在垂直方向上的伸展性。

以下是 VBox 的一个示例:

<VBox>
    <Button text="Button 1" />
    <Button text="Button 2" />
    <Button text="Button 3" />
</VBox> 

HBox
表示水平盒子布局容器,它按照从左到右的顺序水平排列子控件。子控件按照添加的顺序依次排列,每个子控件占据一列。同样,可以通过设置属性来控制子控件的布局行为,例如
flexGrow 属性用于定义子控件在水平方向上的伸展性。

以下是 HBox 的一个示例:

<HBox>
    <Button text="Button 1" />
    <Button text="Button 2" />
    <Button text="Button 3" /> 
 </HBox> 

通过使用 VBoxHBox 可以方便地创建垂直和水平布局的界面,并控制子控件的排列方式和伸缩性。

1.6 日期控件Calendar

在这里插入图片描述

1.6.1 选择一个日期的日期控件

该控件可以选择一个日期,代码如下

<mvc:View
		controllerName="sap.ui5.walkthrough.controller.App"
		height="100%"
		xmlns:l="sap.ui.layout"
		xmlns:u="sap.ui.unified"
		xmlns:mvc="sap.ui.core.mvc"
		xmlns="sap.m"
		class="viewPadding"
>
	<l:VerticalLayout>
		<u:Calendar
				id="calendar"
				select="handleCalendarSelect" />
		<Button
				press="handleSelectToday"
				text="Select Today" />
		<l:HorizontalLayout>
			<Label
					text="Selected Date (yyyy-mm-dd):"
					class="labelMarginLeft" />
			<Text
					id="selectedDate"
					text="No Date Selected"
					class="labelMarginLeft"/>
		</l:HorizontalLayout>
	</l:VerticalLayout>
</mvc:View>

注意在使用中要引入sap.ui.unified库才可以

当在日历上选择了日期以后,会触发handleCalendarSelect事件,我们可以在js代码中获取到所选日期,如下面的代码所示:

// 创建日期格式化器
onInit: function() {
	this.oFormatYyyymmdd = DateFormat.getInstance({pattern: "yyyy-MM-dd", calendarType: CalendarType.Gregorian});
},
handleCalendarSelect: function(oEvent) {
		var oCalendar = oEvent.getSource();

		this._updateText(oCalendar);
	},

_updateText: function(oCalendar) {
	var oText = this.byId("selectedDate"),
		aSelectedDates = oCalendar.getSelectedDates(),
		oDate = aSelectedDates[0].getStartDate();
		// 调用日期格式化器就日期进行格式化
	    oText.setText(this.oFormatYyyymmdd.format(oDate));
},

需要注意的是:在获取所选时间的时候,获取到的是一个数组,我们应该取数组中的第一个元素,aSelectedDates[0],然后通过getStartDate()获取到开始时间。

1.6.2 选择日期区间的日期组件

和上面的代码基本一样,首先需要开启选择日期区间的功能,通过设置intervalSelection为true来设置。

<mvc:View
		controllerName="sap.ui5.walkthrough.controller.App"
		height="100%"
		xmlns:l="sap.ui.layout"
		xmlns:u="sap.ui.unified"
		xmlns:mvc="sap.ui.core.mvc"
		xmlns="sap.m"
		class="viewPadding"
>
	<l:VerticalLayout>
		<u:Calendar
				id="calendar"
				select="handleCalendarSelect"
				intervalSelection="true"/>
		<l:HorizontalLayout>
			<Label
					text="Selected From (yyyy-mm-dd):"
					class="labelMarginLeft" />
			<Text
					id="selectedDateFrom"
					text="No Date Selected"
					class="labelMarginLeft"/>
		</l:HorizontalLayout>
		<l:HorizontalLayout>
			<Label
					text="Selected To (yyyy-mm-dd):"
					class="labelMarginLeft" />
			<Text
					id="selectedDateTo"
					text="No Date Selected"
					class="labelMarginLeft"/>
		</l:HorizontalLayout>
	</l:VerticalLayout>
</mvc:View>

在js代码中获取到选择日期的开始时间和终止时间即可

sap.ui.define([
	'sap/ui/core/mvc/Controller',
	'sap/ui/unified/DateRange',
	'sap/ui/core/format/DateFormat',
	'sap/ui/core/library',
	'sap/ui/core/date/UI5Date',
	'sap/m/MessageToast'
], function(Controller, DateRange, DateFormat, coreLibrary, UI5Date, MessageToast) {
"use strict";

var CalendarType = coreLibrary.CalendarType;

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

	onInit: function() {
		this.oFormatYyyymmdd = DateFormat.getInstance({pattern: "yyyy-MM-dd", calendarType: CalendarType.Gregorian});
	},

	handleCalendarSelect: function(oEvent) {
		var oCalendar = oEvent.getSource();
		this._updateText(oCalendar.getSelectedDates()[0]);
	},

	_updateText: function(oSelectedDates) {
		var oSelectedDateFrom = this.byId("selectedDateFrom"),
			oSelectedDateTo = this.byId("selectedDateTo"),
			oDate;

		if (oSelectedDates) {
			// 获取开始时间
			oDate = oSelectedDates.getStartDate();
			if (oDate) {
				oSelectedDateFrom.setText(this.oFormatYyyymmdd.format(oDate));
			} else {
				oSelectedDateTo.setText("No Date Selected");
			}
			// 获取终止时间
			oDate = oSelectedDates.getEndDate();
			if (oDate) {
				oSelectedDateTo.setText(this.oFormatYyyymmdd.format(oDate));
			} else {
				oSelectedDateTo.setText("No Date Selected");
			}
		} else {
			oSelectedDateFrom.setText("No Date Selected");
			oSelectedDateTo.setText("No Date Selected");
		}
	},
});
});

1.6.3 选择任意的时间以及时间范围

允许用户选择多个时间。设置日期控件的属性为intervalSelection="false" singleSelection="false",即可允许选择任意多个日期以及日期范围。

对应的js代码如下所示:

sap.ui.define([
	'sap/ui/core/mvc/Controller',
	'sap/ui/unified/DateRange',
	'sap/ui/core/format/DateFormat',
	'sap/ui/core/library',
	'sap/ui/core/date/UI5Date',
	'sap/m/MessageToast',
	'sap/ui/model/json/JSONModel'
], function (Controller, DateRange, DateFormat, coreLibrary, UI5Date, MessageToast, JSONModel) {
	"use strict";

	var CalendarType = coreLibrary.CalendarType;

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

		oFormatYyyymmdd: null,
		oModel: null,

		onInit: function () {
			this.oFormatYyyymmdd = DateFormat.getInstance({ pattern: "yyyy-MM-dd", calendarType: CalendarType.Gregorian });

			this.oModel = new JSONModel({ selectedDates: [] });
			this.getView().setModel(this.oModel);
		},

		handleCalendarSelect: function (oEvent) {
			var oCalendar = oEvent.getSource(),
				aSelectedDates = oCalendar.getSelectedDates(),
				oData = {
					selectedDates: []
				},
				oDate,
				i;
			if (aSelectedDates.length > 0) {
				for (i = 0; i < aSelectedDates.length; i++) {
					oDate = aSelectedDates[i].getStartDate();
					oData.selectedDates.push({ Date: this.oFormatYyyymmdd.format(oDate) });
				}
				this.oModel.setData(oData);
			} else {
				this._clearModel();
			}
		},

		handleRemoveSelection: function () {
			this.byId("calendar").removeAllSelectedDates();
			this._clearModel();
		},

		_clearModel: function () {
			var oData = { selectedDates: [] };
			this.oModel.setData(oData);
		}
	});

});

需要注意的是:oCalendar.getSelectedDates()
返回一个数组,其中包含选定日期的信息。每个选定日期都表示为一个对象,其中包含有关日期的相关信息,例如日期的开始和结束时间、附加的自定义数据等。

通常,每个选定日期对象具有以下属性:

  • startDate:选定日期的开始时间,通常是一个 Date 对象。
  • endDate:选定日期的结束时间,如果日期范围为单个日期,则该值为 null
  • data:可选的自定义数据,可以存储与选定日期相关的任何额外信息。

通过访问数组中的每个选定日期对象的属性,您可以获取和处理选定日期的具体信息。

如果需要关闭显示第几周,可以设置showWeekNumbers="false"

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

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

相关文章

电压放大器的应用领域有哪些

电压放大器是一种电子器件&#xff0c;其主要作用是将输入信号的电压放大到输出端。在现代电子技术中&#xff0c;电压放大器被广泛应用于各种领域&#xff0c;包括通信、医疗、工业控制、汽车电子等。下面安泰电子就来详细了解一下电压放大器的应用领域。 通信领域&#xff1a…

软考:中级软件设计师:系统总线,系统可靠性,串联和并联可靠度

软考&#xff1a;中级软件设计师:系统总线&#xff0c; 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心…

4.39ue4:ue4表格设置、读取

1.创建表格&#xff0c;内容浏览器&#xff0c;右键&#xff0c;其他&#xff0c;数据表格&#xff0c;下拉选择一个数据结构类型的起始项。 2.被选择的数据结构将以表格的形式列出数据。 3.使用方式&#xff1a; i: 输出一行数据&#xff08;text&#xff09; ii&#xff…

Stable Diffusion 图片生成AI模型 Windows Mac部署指南

Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;它也可以应用于其他任务&#xff0c;如内补绘制、外补绘制&#xff0c;以及在提示词​&#xff08;英语&#xff09;指导下产生图生图的翻译。 DreamStudio 现已…

一条MYSQL记录是如何储存的

主要还是看MYSQL默认的储存引擎 InnoDB 每个创建一个数据库 就会在/var/lib/mysql/ 目录里面创建一个以 database 为名的目录 目录里面包含以下三个文件 db.opt&#xff0c;用来存储当前数据库的默认字符集和字符校验规则。(数据库的数据)t_order.frm &#xff0c;t_order 的…

html---链接跳转案例

目录 一、要求&#xff1a;设置一个网页如下图所示&#xff0c;可实现首页、列表页、详情页、登录页链接 二、实现&#xff1a;实现代码及截图如下 三、寄语 一、要求&#xff1a;设置一个网页如下图所示&#xff0c;可实现首页、列表页、详情页、登录页链接 二、实现&…

飞书深诺、恒生面试(部分)(未完全解析)

飞书深诺 说一下你对SaaS项目的理解&#xff1f;数据隔离是怎么处理的&#xff1f;Answer: 我们采用的是SAAS服务多租户数据隔离架构中的1.3共享数据库&#xff0c;通过租户ID来隔离&#xff0c;成本最低&#xff0c;隔离级别最低。Q&#xff1a;有没有开发隔离的中间件&#x…

shopee,lazada卖家如何提高店铺权重,带来更多销量

1、优化标题关键词 标题关键词可以在很大程度上影响产品的显示&#xff0c;如果商店自然流量低&#xff0c;必须检查标题是否选择合适的关键词&#xff0c;如果关键词不合适需要优化并进行更换&#xff0c;可以选择一些准确的长尾关键词获得准确的流量&#xff0c;如果收集产品…

在Linux中查找用户帐户信息和登录详细信息的11种方法

在Linux系统中&#xff0c;用户帐户和登录详细信息对于系统管理和安全非常重要。本文将介绍 11 种在 Linux 系统查找用户相关信息的有用方法。这里&#xff0c;我们会讲解在系统中获取一个用户账户详细信息、展示登录详细信息以及用户行为数据的命令。 首先&#xff0c;我们会…

【ARM7.5作业】

作业1 作业2 代码实现&#xff1a; head.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//初始化相关操作 void hal_uart4_init();//发送一个字符 void h…

Mockito的使用案例

流水线的单元测试 代码没有覆盖到&#xff0c;使用的是Mockito测试框架&#xff0c;原来是Mockito没有正确使用 package com.hmdp;import com.hmdp.controller.BlogController; import com.hmdp.entity.Blog; import com.hmdp.service.IBlogService; import com.hmdp.service.…

文心一言 VS 讯飞星火 VS chatgpt (55)-- 算法导论6.3 1题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;55&#xff09;-- 算法导论6.3 1题 一、参照图6-3 的方法&#xff0c;说明 BUILD-MAX-HEAP在数组 A(5&#xff0c;3&#xff0c;17&#xff0c;10&#xff0c;84&#xff0c;19&#xff0c;6&#xff0c;22&#xff0c;9)上的操作…

C#(五十二)之线程

线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作&#xff0c;那么设置不同的线程执行路径往往是有益的&#xff0c;每个线程执行特定的工作。 C#线程操作&#xff0c;需要使用到Thread类。 使用命名空间 using Sy…

grafana+prometheus+pushgateway+flink可视化实时监控

文章目录 一、各部分介绍二、安装配置1、安装pushgateway2、安装Prometheus3、Grafana 安装 三、测试使用 一、各部分介绍 采集层 flink APP和linux system两部分&#xff0c;是我们要收集指标数据的组件传输层 Pushgateway&#xff1a;是一个推送收集和推送数据的组件 Node_ex…

【网络安全带你练爬虫-100练】第5练:爬虫的翻页操作+错误情况过滤

目录 一、翻页分析&#xff1a; 二、代码逻辑 1、入口程序修改 2、page参数传入 三、完整代码 1、运行结果 2、错误分析&#xff1a; 3、缺陷代码&#xff1a; 4、完善逻辑&#xff1a; 5、完善代码&#xff1a; &#xff08;说在前面&#xff0c;任何逻辑都有很多方…

Python软件安装后,Scripts文件夹下为空解决办法

安装Python后&#xff0c;需要使用pip&#xff0c;发现Scripts下为空&#xff0c;无法install pip: 解决办法&#xff1a; cmd进入Windows命令提示符界面&#xff0c;进入Python的安装目录&#xff0c;并使用python -m ensurepip命令执行即可&#xff1a;

R语言——字符串处理

paste(abc, def, gh, sep ) #粘贴字符串 substr(abcdefg, 2, 3) # 取特定字符串 gsub(abc, , c(abc, abcc, abcbc)) # 将字符串中abc替换为空 strsplit(a;b;c, ;, fixed T) # 按照;切分字符串 strsplit(a222b2.2c, 2.2, fixed F) # 按照正则表达式分隔&#xff0c;这里的.是…

15.1 BP神经网络实现图像压缩——了解神经网络在图像处理方面的应用(matlab程序)

1.简述 BP神经网络现在来说是一种比较成熟的网络模型了,因为神经网络对于数字图像处理的先天优势,特别是在图像压缩方面更具有先天的优势,因此,我这一段时间在研究神经网络的时候同时研究了一下关于BP网络实现图像压缩的原理和过程,并且是在MATLAB上进行了仿真的实验,结果发现设…

Java:ThreadLocal解析

Java&#xff1a;ThreadLocal解析 前言一、 什么是ThreadLocal&#xff1f;二、ThreadLocal的内存泄漏问题1.什么是内存泄漏&#xff1f;2.为什么会出现内存泄漏问题&#xff1f;3.如何解决内存泄漏问题&#xff1f;&#xff08;1&#xff09;ThreadLocal会自动清除key为null的…

层级在BW4HANA中的处理

目录 1.从flatfile加载层级的处理 2. 从ERP数据源抽取区间层级到BW 2.1 在ERP中的层级数据源 2.1.1 PSA格式和IDoc格式的区别 2.1.2 怎么查看Interval的字段 2.1.3 如何在S4里查看层级数据源结构 2.1.4 关于时间相关层级date to和date from 1.从flatfile加载层级的处理 层…