SAPUI5基础知识15 - 理解控件的本质
1. 背景
经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。
通常而言,一个典型UI5应用程序的页面结构如下:
- 应用程序的最外层是sap.m.App控件的根容器,用来管理和导航不同的页面sap.m.Page;
- 在一个应用程序中,可以包含若干个页面sap.m.Page,用于承载不同的内容;
- 在一个页面内,根据内容的分类,我们可以有多个面板控件sap.m.Panel,用于信息的分组;
- 在一个面板控件内,又可以有多个不同类型的控件来构成页面的内容,例如sap.m.Button,sap.m.Input等。
这些元素的本质是相同的,它们都是SAPUI5控件。
2. 控件的本质
SAPUI5控件的本质是一个 JavaScript 对象,它封装了 UI 元素的行为和外观。其具体的继承关系如下:
sap.ui.base.Object
:它是所有SAPUI5对象的基类sap.ui.base.EventProvider
: 它继承Object类,并提供触发和绑定事件的能力,当事件被触发时通知事件响应程序sap.ui.base.ManagedObject
:提供绑定功能,使类可以被管理(可以通过getter/setter访问属性、关联和聚合)sap.ui.core.Element
:支持元素绑定,为管理对象添加自定义数据,包含与UI相关的属性,如布局能力、DOM访问sap.ui.core.Control
: 所有SAPUI5控件的基类,它提供控件生命周期的功能sap.m.Label
: 特定的控件的实现,在本例中为标签控件, 它是对Control对象功能的扩展
每个控件都有自己的属性和所继承的属性,控件可以访问父对象的属性(通过原型链)。
通过上面的关系图可见,SAPUI5中每个具体的控件都继承自sap.ui.core.Control
类,控件将会包含对应的构造函数、属性、聚合、关联、事件和方法。
2.1 构造函数(Constructor)
构造函数用于创建控件实例。通常在创建控件时,可以传递一个 JSON 对象来初始化控件的属性、聚合等。
var oButton = new sap.m.Button({text: "Click Me",press: function() {alert("Button Pressed");}
});
2.2 属性(Properties)
属性是控件的基本数据单元,用于定义控件的状态。属性通常是简单的数据类型,如字符串、数字或布尔值。
通过JS代码设置控件属性:
var oText = new sap.m.Text({text: "Hello, World!"
});
在XML文件中设置控件属性:
<mvc:Viewxmlns="sap.m"
><Text text="Hello World" />
</mvc:View>
2.3 聚合(Aggregations)
聚合是控件的子控件集合,用于构建复杂的 UI 结构。一个控件可以包含多个子控件。
聚合定义了控件之间的父子关系,用于构建控件层次结构,父控件与子控件共享其生命周期。
通过JS代码设置聚合:
var oPage = new sap.m.Page("myPage", {title: "My Page",content: [new sap.m.Button("myButton", {text: "Click Me",press: function() {alert("Button pressed");}}),new sap.m.List("myList", {items: [new sap.m.StandardListItem("item1", { title: "Item 1" }),new sap.m.StandardListItem("item2", { title: "Item 2" }),new sap.m.StandardListItem("item3", { title: "Item 3" })]})]
});
在这个示例中,sap.m.Page
控件有一个名为content
的Aggregation,它包含了一个sap.m.Button
控件和一个sap.m.List
控件。sap.m.List
控件又有一个名为items
的Aggregation,它包含了三个sap.m.StandardListItem
控件。
在JavaScript代码中创建聚合时,
- 对于每个多重聚合,都提供了一个add函数:
add<aggregationName>()
- 对于简单聚合(0:1基数),提供了一个setter函数:
set<aggregationName>()
- 这些函数接受一个实例化的控制对象,该对象将被添加到聚合
<aggregationName>
- 聚合可以使用聚合的
getter
函数获取
var oHorizontalLayout = new sap.ui.layout.HorizontalLayout();
oHorizontalLayout.addContent(new sap.m.Text({text: "Hello World" }));
oHorizontalLayout.getContent(); //[sap.m.Text]
当在XML视图中创建聚合时:
- 聚合控件可以放在父元素的开始和结束标记之间
- 如果聚合被标记为
默认
(在API文档中),则不必为聚合本身创建节点 - 否则,您将聚合控件包含在
<aggregationName></aggregationName>
标签中 - 对于HorizontalLayout, content是默认聚合,因此可以跳过它
<layout:HorizontalLayout><content><Text text="Hello World" /></content>
</layout:HorizontalLayout>
聚合的名称可以省略:
<layout:HorizontalLayout><Text text="Hello World" />
</layout:HorizontalLayout>
2.4 关联(Associations)
关联用于定义控件之间的关系,但与聚合不同,关联并不直接包含子控件,而是引用其他控件。
关联允许一个控件引用另一个控件,但不会创建父子关系(关联控件的生命周期独立于它们的父控件)。
例如,sap.m.Checkbox
控件有一个名为ariaLabelledBy
的关联,根据API文档,它接受一个sap.ui.core.Control
对象或sap.ui.core.ID
对象的数组
在Javascript代码中创建关联时:
- 对于每个多重关联,都提供一个add函数:
add<associationName>()
- 对于简单关联(0:1基数),提供了一个setter函数:
set<associationName>()
- 这些函数接受一个实例化的控件对象或控件的ID对象,该对象将被添加到关联
<associationName>
- 可以使用关联的
getter
函数获取关联
var oCheckbox = new sap.m.Checkbox({ text: "Ok" });
var oLabel = new sap.m.Label({ text: "Select option" });
oCheckbox.addAriaLabelledBy(oLabel);
在XML视图中创建关联时:
- 类似于聚合的创建
- 通过指定关联控件的ID将其设置为一个简单属性
<CheckBox text= "Hello World"ariaLabelledBy= "idOfLabel" />
以下是一个简单的示例,展示了如何在SAPUI5中使用Control Association:
var oInput = new sap.m.Input("myInput");var oLabel = new sap.m.Label("myLabel", {text: "Enter your name:",labelFor: oInput
});
在这个示例中,sap.m.Label
控件有一个名为labelFor
的Association,它引用了一个sap.m.Input
控件。当用户点击该标签时,关联的输入字段将获得焦点。
2.5 事件(Events)
事件是控件与用户交互的方式。控件可以触发事件,应用程序可以监听这些事件并作出响应。
在Javascript代码中处理事件处理程序时:
- 每个事件都有一个
attach<eventName>()
函数,它接受处理程序函数 - 这个处理程序的第一个参数应该是一个
oEvent
对象,它保存了特定于事件的信息 - 每个事件都有一个
detach<eventName>()
函数,用于删除处理程序
在XML视图中处理事件处理程序时:
- 事件处理程序在XML属性中定义为标准属性
- 只需指定处理事件的函数名(从控制器中)
- 这个处理程序的第一个参数应该是一个oEvent对象,它保存了特定于事件的信息
注意:不要在指定事件处理程序函数时使用圆括号!
在SAPUI5中,Control Event是控件可以触发的一种行为。这些事件通常是由用户交互(如点击按钮、选择列表项等)或程序逻辑(如数据加载完成)触发的。开发者可以为这些事件编写处理函数,以便在事件发生时执行特定的操作。
以下是一个简单的示例,展示了如何在SAPUI5中使用Control Event:
var oButton = new sap.m.Button("myButton", {text: "Click Me",press: function() {alert("Button pressed");}
});
在这个示例中,sap.m.Button
控件有一个名为press
的事件,它的处理函数是一个匿名函数,当用户点击按钮时,这个函数就会被执行,显示一个警告框。
2.6 方法(Methods)
方法是控件的行为函数,用于执行特定的操作。方法可以是控件自带的,也可以是自定义的。
var oButton = new sap.m.Button({text: "Click Me"
});// 调用方法设置按钮文本
oButton.setText("New Text");
3. 参考资料
有关SAPUI5控件的使用文档,可查看https://sapui5.hana.ondemand.com/#/api ,在官方文档中,详细描述了每个控件的具体用法。
4. 小结
本文对于SAPUI5中控件的概念进行了总结,并给出了相关的示例。
相关文章:
![](https://i-blog.csdnimg.cn/direct/3a05a9a6578f4bafb2c5fe0805aa170b.png)
SAPUI5基础知识15 - 理解控件的本质
1. 背景 经过一系列的练习,通过不同的SAPUI5控件,我们完成了对应用程序界面的初步设计,在本篇博客中,让我们一起总结下SAPUI5控件的相关知识点,更深入地理解SAPUI5控件的本质。 通常而言,一个典型UI5应用…...
![](https://i-blog.csdnimg.cn/direct/5c85164dd01d4a6a8e1583e513b710ab.png)
十七、【机器学习】【非监督学习】- K-均值 (K-Means)
系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...
![](https://i-blog.csdnimg.cn/direct/c5c0a1fcb96846918f783b10d6271ea7.png)
算法力扣刷题记录 五十六【501.二叉搜索树中的众数】
前言 二叉搜索树操作,继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)…...
![](https://i-blog.csdnimg.cn/direct/2c86a0ed08a1427b862bc989c6fe6c32.png)
分布式搜索引擎ES-Elasticsearch进阶
1.head与postman基于索引的操作 引入概念: 集群健康: green 所有的主分片和副本分片都正常运行。你的集群是100%可用 yellow 所有的主分片都正常运行,但不是所有的副本分片都正常运行。 red 有主分片没能正常运行。 查询es集群健康状态&…...
![](https://www.ngui.cc/images/no-images.jpg)
低代码与传统编程:快速高质量构建系统的比较与方法
在信息技术飞速发展的今天,企业对软件系统的需求不断增加。然而,如何在保证高质量的前提下快速构建系统成为了一个关键问题。本文将深入探讨低代码(Low-Code)开发与传统代码编程的区别,并探讨如何利用这两种方法快速高…...
![](https://i-blog.csdnimg.cn/direct/b734596f2c564b9b81f458d42cb680ce.png)
WebRTC音视频-环境搭建
目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1:VScode安装 2.2:MobaXterm安装 3:WebRTC服务器环境搭建 3.1:安装openssh服务器 3.2:安装Node.js 3.3:coturn穿透和转发服务器 3.3.1&a…...
![](https://www.ngui.cc/images/no-images.jpg)
Memcached开发(八):使用PHP进行操作
目录 1. 安装与配置 1.1 安装Memcached服务器 1.2 安装PHP的Memcached扩展 2. 基本操作 2.1 连接Memcached服务器 2.2 设置与获取数据 2.3 删除数据 2.4 检查数据是否存在 2.5 添加和替换数据 3. 高级操作 3.1 批量操作 3.2 数据计数器 3.3 CAS(Check …...
![](https://img-blog.csdnimg.cn/img_convert/e1d06c855a73c91d8ff0fac46eb04515.png)
[Spring Boot]Protobuf解析MQTT消息体
简述 本文主要针对在MQTT场景下,使用Protobuf协议解析MQTT的消息体 Protobuf下载 官方下载 https://github.com/protocolbuffers/protobuf/releases网盘下载 链接:https://pan.baidu.com/s/1Uz7CZuOSwa8VCDl-6r2xzw?pwdanan 提取码:an…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是Mappers?Mappers的作用是什么?
在软件开发中,“mappers” 通常指的是数据映射器(Data Mappers),它们的主要作用是在应用程序的数据持久化层(通常是数据库或其他持久化存储)与应用程序的业务逻辑之间建立一个映射层。 具体来说࿰…...
![](https://i-blog.csdnimg.cn/direct/3f8db604d2b94bff8aedda46a71fea3d.png)
python-多任务编程
2. 多任务编程 2.1 多任务概述 多任务 即操作系统中可以同时运行多个任务。比如我们可以同时挂着qq,听音乐,同时上网浏览网页。这是我们看得到的任务,在系统中还有很多系统任务在执行,现在的操作系统基本都是多任务操作系统,具备…...
![](https://i-blog.csdnimg.cn/direct/e617d1a0156d42109741d38a1dc5f049.png)
IDEA创建Java工程、Maven安装与建立工程、Web工程、Tomcat配置
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
![](https://www.ngui.cc/images/no-images.jpg)
使用工作流产生高质量翻译内容的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
![](https://i-blog.csdnimg.cn/direct/7ce014d36210435eacd8798482a8cfc5.png)
笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调
内容摘自王老师的B站视频,大家还是尽量去看视频,老师讲的特别好,不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning(小样本分类) 假设现在每类…...
![](https://www.ngui.cc/images/no-images.jpg)
初学Mybatis之 CRUD 增删改查
namespace 中的包名要和 Dao/Mapper 接口的包名一致 select:选择,查询语句 同理,还有 insert、update、delete 标签 id:对应的 namespace 中的方法名 resultType:sql 语句执行的返回值 parameterType:…...
![](https://www.ngui.cc/images/no-images.jpg)
Kali Linux APT 设置指南:如何控制软件包更新行为
在我浏览 CSDN 的问答社区时,我发现一篇求助内容是一位用户对于如何在使用 APT 更新时避免更新 Arduino 这个问题感到困惑。这激发了我写这篇博客的灵感。我希望通过这篇文章,帮助那些在 Kali Linux 上使用 APT 管理软件包更新的朋友们,特别是…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 10.0 Settings 加载流程
一、系统设置首页 代码路径:packages/app/Settings/ 1 主界面加载: <!-- Alias for launcher activity only, as this belongs to each profile. --><activity-alias android:name"Settings"android:label"string/settings_la…...
![](https://i-blog.csdnimg.cn/direct/6b9f8116b17a4068999f468cca10a11d.png)
mysql的索引、事务和存储引擎
目录 索引 索引的概念 索引的作用 作用 索引的副作用 创建索引 创建索引的原则和依据 索引的类型 创建索引 查看索引 删除索引 drop 主键索引 普通索引 添加普通索引 唯一索引 添加唯一索引 组合索引 添加组合索引 查询组合索引 全文索引 添加全文索引 …...
![](https://www.ngui.cc/images/no-images.jpg)
基于trace_id实现SpringCloudGateway网关的链路追踪
之前写的两篇关于基于 trace_id 的链路追踪的文章: 基于trace_id的链路追踪(含Feign、Hystrix、线程池等场景)基于trace_id的链路追踪(ForkJoinPool场景) 一、引言 在之前的文章中,我们讨论了基于 trace…...
![](https://www.ngui.cc/images/no-images.jpg)
Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024)
Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024) Windows 11, version 22H2,企业版 arm64 x64 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作者…...
![](https://i-blog.csdnimg.cn/direct/07775b7bde2f45f988a2650f4be1c691.png)
【C语言】动态内存管理(上)
文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例(malloc和free) 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要,为…...
![](https://img-blog.csdnimg.cn/direct/df413fc3bbea46f7962bc7fe31fa6a01.png)
【BUG】已解决:ModuleNotFoundError: No module named‘ pip‘
已解决:ModuleNotFoundError: No module named‘ pip‘ 目录 已解决:ModuleNotFoundError: No module named‘ pip‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…...
![](https://www.ngui.cc/images/no-images.jpg)
网络安全-网络安全及其防护措施11
51.网络容量规划 网络容量规划的概念和重要性 网络容量规划: 是指根据业务需求和预期增长,合理规划和设计网络的带宽、设备和资源,以满足未来网络流量和服务质量的需求。通过有效的网络容量规划,确保网络性能稳定和用户体验良好…...
![](https://i-blog.csdnimg.cn/direct/f4e261a82f024069bd52482e3d468e02.png)
使用IDEA编写lua脚本并运行
下载lua https://github.com/rjpcomputing/luaforwindows/releases 是否创建桌面快捷方式:我们的目标是使用IDEA编写lua脚本,所以不需要勾选。后面需要的话,可以到安装目录下手动创建快捷方式 环境变量自动配置 安装后会自动配置好环境变量…...
![](https://i-blog.csdnimg.cn/direct/addbf989194241f6b801319ef1f5f0f9.png)
CentOS 7 安装MySQL 5.7.30
CentOS 7 安装MySQL卸载(离线安装) 安装配置MySQL之前先查询是否存在,如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除(删除…...
![](https://img-blog.csdnimg.cn/fa80b15381a8400ca124d37ae57376ff.png)
Bash 学习摘录
文章目录 1、变量和参数的介绍(1)变量替换$(...) (2)特殊的变量类型export位置参数shift 2、引用(1)引用变量(2)转义 3、条件判断(1)条件测试结构(…...
![](https://i-blog.csdnimg.cn/direct/621cafe3056f49aa8155817bf79038f3.png)
GD32 MCU是如何进入中断函数的
用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道MCU是如何找到中断函数入口的吗? 今天我们就以GD32F303系列…...
![](https://www.ngui.cc/images/no-images.jpg)
Ruby 循环
Ruby 循环 在编程中,循环是一种常用的控制结构,它允许我们重复执行一段代码多次。Ruby 作为一种灵活的编程语言,提供了多种循环方法,包括 while、until、for、each 和 loop 等。本文将详细介绍 Ruby 中的循环机制,并通…...
![](https://i-blog.csdnimg.cn/direct/2cae243d3c8f4b198bd1594165da8012.png)
三字棋游戏(C语言详细解释)
hello,小伙伴们大家好,算是失踪人口回归了哈,主要原因是期末考试完学校组织实训,做了俄罗斯方块,后续也会更新,不过今天先从简单的三字棋说起 话不多说,开始今天的内容 一、大体思路 我们都知…...
![](https://i-blog.csdnimg.cn/direct/21275bdb558e48bfb94b02929009515e.png)
H3CNE(计算机网络的概述)
1. 计算机网络的概述 1.1 计算机网络的三大基本功能 1. 资源共享 2. 分布式处理与负载均衡 3. 综合信息服务 1.2 计算机网络的三大基本类型 1.3 网络拓扑 定义: 网络设备连接排列的方式 网络拓扑的类型: 总线型拓扑: 所有的设备共享一…...
![](https://www.ngui.cc/images/no-images.jpg)
【极客日常】Golang一个的slice数据替换的bug排查
上周某天下班前,接到同事转来一个bug要排查,症状是代码重构之后某些业务效果不符合预期,由于代码重构人是笔者,于是blame到笔者这边。经过10min左右的排查和尝试后,解决了这个问题:既往逻辑没有改动&#x…...
![](/images/no-images.jpg)
武汉网络科技有限公司排名/福州seo按天收费
话说使用Redis已经有好一段时间,趁有点时间,结合Guang.com 使用经验,总结一下Redis 在社会化电商网站的实际应用场景。文笔较差,各位看官,凑合着看下吧。 1. 各种计数,商品维度计数和用户维度计数 说起电商…...
![](https://img-blog.csdnimg.cn/img_convert/21935fa616f49431d02303a9d8b8cb15.png)
房产网站内容建设部门规划/seo查询优化
前言玩转ECharts系列,主要为大家讲解我们基于ECharts如何实现企业级大屏项目中较为常用的各种奇奇怪怪的图表,接下来我们将通过几篇文章从基础图表开始为大家详细讲解实现这些图表样式的一些“小心机”。导读阅读完此文,你会了解基于ECharts&…...
![](/images/no-images.jpg)
网站怎么建立视频/百度网盘官网登陆入口
以前也想这个问题,程序还没有写如何测试呢?看下泥瓦匠如何工作的吧:工匠一:先拉一跟水平线,砌每一块砖时,都与这根水平线进行比较,使得每一块砖都保持水平;工匠二:先将一排砖砌完,然后拉一跟水平线,看看哪些砖有问题,然后进行调整.看过这则类比之后直想笑,第二个工匠真的很笨,…...
![](/images/no-images.jpg)
东营seo网站推广费用/百度资源提交
总结自己的调试心得,总结如下: 1、Cisco29系列交换机可以做基于2层的端口安全,即mac地址与端口进行绑定。 2、 Cisco3550以上交换机均可做基于2层和3层的端口安全,即mac地址与端口绑定以及mac地址与ip地址绑定。 3、以…...
![](http://o7ubfyghw.bkt.clouddn.com/set%20shutter%20shortcut%2002.jpg)
有域名和虚拟服务器后怎么做网站/seo课程多少钱
在linux mint上使用shutter,可以通过快捷键提高使用舒适度 1.找到“键盘”,设置应用程序和快捷键 2.设置应用程序快捷键为ctrlalta 在需要截图的时候,调用快捷键即可 在shutter的“编辑–> 首选项” 中可以设置保存路径、行为等...
![](/images/no-images.jpg)
做视频网站源码/郑州网站建设制作公司
( 注: HR911105A是网络插座变压器,而RJ45是不带网络变压器的 ) 在以太网设备中,通过PHY接RJ45时,中间都会加一个网络变压器。有的变压器中心抽头接到地。而且接电源时,电源值又可以不一样,3.3V,…...