当前位置: 首页 > news >正文

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中控件的概念进行了总结,并给出了相关的示例。

相关文章:

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习&#xff0c;通过不同的SAPUI5控件&#xff0c;我们完成了对应用程序界面的初步设计&#xff0c;在本篇博客中&#xff0c;让我们一起总结下SAPUI5控件的相关知识点&#xff0c;更深入地理解SAPUI5控件的本质。 通常而言&#xff0c;一个典型UI5应用…...

十七、【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...

算法力扣刷题记录 五十六【501.二叉搜索树中的众数】

前言 二叉搜索树操作&#xff0c;继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;…...

分布式搜索引擎ES-Elasticsearch进阶

1.head与postman基于索引的操作 引入概念&#xff1a; 集群健康&#xff1a; green 所有的主分片和副本分片都正常运行。你的集群是100%可用 yellow 所有的主分片都正常运行&#xff0c;但不是所有的副本分片都正常运行。 red 有主分片没能正常运行。 查询es集群健康状态&…...

低代码与传统编程:快速高质量构建系统的比较与方法

在信息技术飞速发展的今天&#xff0c;企业对软件系统的需求不断增加。然而&#xff0c;如何在保证高质量的前提下快速构建系统成为了一个关键问题。本文将深入探讨低代码&#xff08;Low-Code&#xff09;开发与传统代码编程的区别&#xff0c;并探讨如何利用这两种方法快速高…...

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1&#xff1a;VScode安装 2.2&#xff1a;MobaXterm安装 3:WebRTC服务器环境搭建 3.1&#xff1a;安装openssh服务器 3.2&#xff1a;安装Node.js 3.3&#xff1a;coturn穿透和转发服务器 3.3.1&a…...

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&#xff08;Check …...

[Spring Boot]Protobuf解析MQTT消息体

简述 本文主要针对在MQTT场景下&#xff0c;使用Protobuf协议解析MQTT的消息体 Protobuf下载 官方下载 https://github.com/protocolbuffers/protobuf/releases网盘下载 链接&#xff1a;https://pan.baidu.com/s/1Uz7CZuOSwa8VCDl-6r2xzw?pwdanan 提取码&#xff1a;an…...

什么是Mappers?Mappers的作用是什么?

在软件开发中&#xff0c;“mappers” 通常指的是数据映射器&#xff08;Data Mappers&#xff09;&#xff0c;它们的主要作用是在应用程序的数据持久化层&#xff08;通常是数据库或其他持久化存储&#xff09;与应用程序的业务逻辑之间建立一个映射层。 具体来说&#xff0…...

python-多任务编程

2. 多任务编程 2.1 多任务概述 多任务 即操作系统中可以同时运行多个任务。比如我们可以同时挂着qq&#xff0c;听音乐&#xff0c;同时上网浏览网页。这是我们看得到的任务&#xff0c;在系统中还有很多系统任务在执行,现在的操作系统基本都是多任务操作系统&#xff0c;具备…...

IDEA创建Java工程、Maven安装与建立工程、Web工程、Tomcat配置

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …...

使用工作流产生高质量翻译内容的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调

内容摘自王老师的B站视频&#xff0c;大家还是尽量去看视频&#xff0c;老师讲的特别好&#xff0c;不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning&#xff08;小样本分类&#xff09; 假设现在每类…...

初学Mybatis之 CRUD 增删改查

namespace 中的包名要和 Dao/Mapper 接口的包名一致 select&#xff1a;选择&#xff0c;查询语句 同理&#xff0c;还有 insert、update、delete 标签 id&#xff1a;对应的 namespace 中的方法名 resultType&#xff1a;sql 语句执行的返回值 parameterType&#xff1a;…...

Kali Linux APT 设置指南:如何控制软件包更新行为

在我浏览 CSDN 的问答社区时&#xff0c;我发现一篇求助内容是一位用户对于如何在使用 APT 更新时避免更新 Arduino 这个问题感到困惑。这激发了我写这篇博客的灵感。我希望通过这篇文章&#xff0c;帮助那些在 Kali Linux 上使用 APT 管理软件包更新的朋友们&#xff0c;特别是…...

Android 10.0 Settings 加载流程

一、系统设置首页 代码路径&#xff1a;packages/app/Settings/ 1 主界面加载&#xff1a; <!-- Alias for launcher activity only, as this belongs to each profile. --><activity-alias android:name"Settings"android:label"string/settings_la…...

mysql的索引、事务和存储引擎

目录 索引 索引的概念 索引的作用 作用 索引的副作用 创建索引 创建索引的原则和依据 索引的类型 创建索引 查看索引 删除索引 drop 主键索引 普通索引 添加普通索引 唯一索引 添加唯一索引 组合索引 添加组合索引 查询组合索引 全文索引 添加全文索引 …...

基于trace_id实现SpringCloudGateway网关的链路追踪

之前写的两篇关于基于 trace_id 的链路追踪的文章&#xff1a; 基于trace_id的链路追踪&#xff08;含Feign、Hystrix、线程池等场景&#xff09;基于trace_id的链路追踪&#xff08;ForkJoinPool场景&#xff09; 一、引言 在之前的文章中&#xff0c;我们讨论了基于 trace…...

Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024)

Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024) Windows 11, version 22H2&#xff0c;企业版 arm64 x64 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者…...

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例&#xff08;malloc和free&#xff09; 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要&#xff0c;为…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...