SAPUI5基础知识19 - 视图嵌套(Nested Views)

1. 背景

SAPUI5 是一个用于构建企业级 Web 应用程序的 JavaScript 框架。它提供了丰富的 UI 控件和工具,帮助开发者创建复杂的用户界面。Nested Views 是 SAPUI5 中的一种设计模式,允许在一个视图中嵌套另一个视图。这种模式有助于模块化和重用代码,特别是在构建复杂的应用程序时。

Nested Views 是指在一个主视图(Parent View)中嵌入一个或多个子视图(Child Views)。这种嵌套可以通过 XML、JSON 或 JavaScript 代码来实现。通过这种方式,可以将应用程序的不同部分分离到独立的视图中,从而提高代码的可维护性和可重用性。

通过Nested Views 这种技术,我们可以实现:

  • 模块化开发:将应用程序的不同功能模块分离到独立的视图中,便于开发和维护。
  • 代码重用:相同的子视图可以在多个主视图中重用,减少重复代码。
  • 动态视图加载:根据用户操作或其他条件动态加载不同的子视图,提高应用程序的灵活性。

2. 示例

假设我们有一个主视图MainView,其中包含两个子视图 HeaderViewContentView

2.1 子视图HeaderView

子视图HeaderView对应的XML视图代码和控制器代码如下:

  • HeaderView.view.xml
<mvc:ViewcontrollerName="myApp.controller.HeaderView"xmlns:mvc="sap.ui.core.mvc"xmlns="sap.m"><Bar><contentLeft><Button text="Home" press="onHomePress"/></contentLeft><contentMiddle><Title text="Header"/></contentMiddle></Bar>
</mvc:View>
  • HeaderView.controller.js
sap.ui.define(["sap/ui/core/mvc/Controller"
], function (Controller) {"use strict";return Controller.extend("myApp.controller.HeaderView", {onHomePress: function () {// Home button press logic}});
});

2.2 子视图ContentView

子视图ContentView对应的XML视图代码和控制器代码如下:

  • ContentView.view.xml
<mvc:ViewcontrollerName="myApp.controller.ContentView"xmlns:mvc="sap.ui.core.mvc"xmlns="sap.m"><VBox><Text text="This is the content area"/></VBox>
</mvc:View>
  • ContentView.controller.js
sap.ui.define(["sap/ui/core/mvc/Controller"
], function (Controller) {"use strict";return Controller.extend("myApp.controller.ContentView", {// Content view logic});
});

2.3 创建主视图MainView并嵌套子视图

主视图MainView对应的XML视图代码和控制器代码如下:

  • MainView.view.xml
<mvc:ViewcontrollerName="myApp.controller.MainView"xmlns:mvc="sap.ui.core.mvc"xmlns="sap.m"><Page><mvc:XMLView viewName="myApp.view.HeaderView"/><mvc:XMLView viewName="myApp.view.ContentView"/></Page>
</mvc:View>
  • MainView.controller.js
sap.ui.define(["sap/ui/core/mvc/Controller"
], function (Controller) {"use strict";return Controller.extend("myApp.controller.MainView", {// Main view logic});
});

注意:引用视图时,必须指定应用程序的命名空间(e.g. myApp)来引用视图。
通过使用 Nested Views,我们可以将应用程序的不同部分分离到独立的视图中,从而提高代码的可维护性和可重用性。这种设计模式在构建复杂的 SAPUI5 应用程序时非常有用。

3. 练习

在前序练习的基础上,让我们将应用程序中,Panel面板控件的内容移动到一个单独的视图文件。

3.1 创建一个新的视图文件

首先,在视图文件夹下,创建一个新的视图文件HelloPanel.view.xml,并指定其controllerName属性来指定视图的控制器。

在这里插入图片描述

并将App.view.xml视图文件中,Panel面板控件中的内容已添加到新文件HelloPanel.view.xml

新创建的HelloPanel.view.xml文件中的代码如下:

<mvc:ViewcontrollerName="zsapui5.test.controller.HelloPanel"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"
><PanelheaderText="{i18n>helloPanelTitle}"class="sapUiResponsiveMargin"width="auto"><content><Buttontext="{i18n>showHelloButtonText}"press=".onShowHello"class="myCustomButton"/><Inputvalue="{/recipient/name}"valueLiveUpdate="true"width="60%"/><FormattedTexthtmlText="Hello {/recipient/name}"class="sapUiSmallMargin sapThemeHighligh-asColor myCustomText"/></content></Panel>
</mvc:View>

3.2 创建一个新的控制器文件

在控制器文件夹下,创建新的控制器文件HelloPanel.controller.js,并将App.controller.js中对应的onShowHello( )方法移到此处。
在这里插入图片描述
HelloPanel.controller.js文件中的代码如下:

sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast"
], function (Controller, MessageToast) {"use strict";return Controller.extend("zsapui5.test.controller.HelloPanel", {onShowHello: function () {// read msg from i18n modelconst oBundle = this.getView().getModel("i18n").getResourceBundle();const sRecipient = this.getView().getModel().getProperty("/recipient/name");const sMsg = oBundle.getText("helloMsg", [sRecipient]);// show messageMessageToast.show(sMsg);}});
});

3.3 简化主控制器

我们现在已经将的onShowHello( )方法从主控制器App.controller.js中移至HelloPanel.controller.js

在此,我们更新主控制器文件中的逻辑,更新后主控制器中的逻辑为空,我们稍后的练习中将使用它来添加更多功能。
在这里插入图片描述
更新后App.controller.js文件中的代码如下:

sap.ui.define(["sap/ui/core/mvc/Controller"
], function (Controller) {"use strict";return Controller.extend("zsapui5.test.controller.App", {});
});

3.4 调整应用程序的主视图

最后,让我们在主视图App.view.xml中引用我们新创建出来的视图HelloPanel.view.xml

在这里插入图片描述

使用SAPUI5库sap.ui.core.mvc中对应的XMLView标签引用子视图。

改动后的主视图App.view.xml文件内容如下:

<mvc:ViewcontrollerName="zsapui5.test.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"displayBlock="true"
><!--在视图中想要使用的库的命名空间列表--><Shell><App class="myAppDemoWT"><pages><Page title="{i18n>homePageTitle}"><content><mvc:XMLView viewName="zsapui5.test.view.HelloPanel" /></content></Page></pages></App></Shell>
</mvc:View>

3.5 运行程序

运行改动后程序,其界面并未发生变化:

在这里插入图片描述
通过ctrl + shift + alt + s打开辅助工具,查看控件结构,我们可以发现新增加的XMLView控件。

在这里插入图片描述

4. 小结

本文介绍了SUPUI5中视图嵌套的技术,并通过实际的代码示例展示了其用法。

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

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

相关文章

低代码如何加速数字化转型

数字化转型&#xff0c;正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中&#xff0c;战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…

react中组件间的通信

一、父传子 1.代码展示 import React, { useState } from react;function SonPage(props){ // 子组件const {msg} propsreturn (<div>我是子组件 {msg}</div>) }function App() { // 父组件const [msgText,setMsgText] useState(父传子)return (<div classN…

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言&#xff08;一&#xff09;优点&#xff08;二&#xff09;特点&#xff08;三&#xff09;调用运行&#xff08;四&#xff09;新建 二、认识界面快捷键&#xff08;一&#xff09;三种模式&#xff08;1&#xff09;蓝色模式&#xff1a;…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

ICMPv6与NDP

ICMP ICMPv6是 IPv6 的基础协议之一。 在 IPv6 报文头部中, Next Header 字段值为 58 则对应为 ICMPv6 报文。 ICMPv6报文用于通告相关信息或错误。 ICMP报文 Type字段:0-127表示差错消息,128-255表示信息消息。 ICMP消息类型 差错消息 差错消息用于报告在转发IPv6数据包过…

如何应对SQL注入攻击?

引言 在现今的网络世界中&#xff0c;安全性已成为至关重要的话题。SQL注入&#xff08;SQL Injection&#xff09;是一种常见且危险的网络攻击方式&#xff0c;攻击者通过向SQL查询中插入恶意代码来操控数据库&#xff0c;从而获取敏感信息或破坏数据。了解SQL注入的各种类型…

案例分析:人工智能在航空航天领域的应用

作者主页: 知孤云出岫 目录 作者主页:案例分析&#xff1a;人工智能在航空航天领域的应用引言人工智能在航空航天中的主要应用案例分析案例一&#xff1a;AI优化航天器设计案例二&#xff1a;AI辅助飞行安全——预测维护案例三&#xff1a;AI自动驾驶系统案例四&#xff1a;A…

【Maven学习】-2. POM讲解

文章目录 2. POM讲解2.1 POM.xml2.2 POM 结构1) modules2) parent3) properties4) dependency依赖范围 5) repository仓库分类 6) build自定义打包名字指定打包路径 7) 插件-pluginsmaven-compiler-pluginmaven-surefire-pluginmaven-jar-pluginmaven-install-pluginmaven-clea…

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类&#xff0c;运行时异常举几个例子&#xff0c;什么情况下会出现&#xff1f;6、讲一下Java中线程的…

vue3+ts+vite+electron+electron-packager打包成exe文件

目录 1、创建vite项目 2、添加需求文件 3、根据package.json文件安装依赖 4、打包 5、electron命令运行 6、electron-packager打包成exe文件 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron 1、创建vite项目 npm create vitelatest 2、添…

【C++】深度解析:用 C++ 模拟实现 list 类,探索其底层实现细节

目录 list介绍 list模拟实现 list 节点类 list 的迭代器 定义 构造函数 解引用 operator前置和--与后置和-- operator与operator! list 类 构造函数 begin()和end() 拷贝构造 erase() clear() 析构函数 insert push_back 和 push_front pop_back 和 pop_front…

Leetcode—769. 最多能完成排序的块【中等】

2024每日刷题&#xff08;149&#xff09; Leetcode—769. 最多能完成排序的块 实现代码 class Solution { public:int maxChunksToSorted(vector<int>& arr) {int ans 0;int mx INT_MIN;for(int i 0; i < arr.size(); i) {mx max(arr[i], mx);if(mx i) {a…

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…

登顶官方热榜,“超级智能体创造营”一期获奖名单公开!

自超级智能体创造营活动7月11日上线以来&#xff0c;受到很多平台开发者的关注&#xff0c;很开心看到首期创造营聚集了诸多优秀的平台开发者&#xff0c;共同参与到主题创作中&#xff0c;提交了100 的创意智能体&#xff01; 经过官方伙伴历经多轮、多维度的专业评审&#x…

yarn安装electron时报错RequestError:socket hang up

安装electron时候&#xff0c;出现RequestError:socket hang up这样的错误&#xff0c;找了半天很多方式都是用旧淘宝源&#xff0c;导致根本安装不上去。 在项目的根目录下创建.npmrc文件&#xff0c;添加以下内容 # registryhttps://mirrors.huaweicloud.com/repository/np…

乐尚代驾八订单执行三

司机到达代驾终点&#xff0c;代驾结束了。结束代驾之后&#xff0c; – 获取额外费用&#xff08;高速费、停车费等&#xff09; – 计算订单实际里程&#xff08;实际与预估有偏差&#xff09; – 计算代驾实际费用 – 系统奖励 – 分账信息 – 生成最终账单 计算订单…

{Spring Boot 原理篇} Spring Boot自动装配原理

SpringBootApplication 1&#xff0c;Spring Boot 应用启动&#xff0c;SpringBootApplication标注的类就是启动类&#xff0c;它去实现配置类中的Bean的自动装配 SpringBootApplication public class SpringbootRedis01Application {public static void main(String[] args)…

DL/T645、IEC104转BACnet网关实现实时数据采集

BA102网关是钡铼技术专为实现电力协议DL/T645、IEC104与楼宇自控协议BACnet相互转化而研发的。它下行采集支持Modbus RTU、Modbus TCP、DL/T645、IEC104等协议&#xff0c;上行转发则支持BACnet IP和BACnet MS/TP协议&#xff0c;从而实现了电力协议与楼宇自控协议之间的相互转…

切换数据失败0x1671分析

1、问题背景 切换双卡数据开关&#xff0c;无法切换成功&#xff0c;且单机必现该问题 2、问题分析 搜索Log发现相关拨号无法建立成功&#xff0c;返回0x1671&#xff0c;无法建立PDN连接。 相关拨号上层未下发相关AT命令&#xff0c;属于上层报错&#xff0c;并非网络问题&…

AI有关的学习和python

一、基本概念 AIGC&#xff08;AI Generated content AI 生成内容&#xff09; AI生成的文本、代码、图片、音频、视频。都可以成为AIGC。 Generative AI&#xff08;生成式AI&#xff09;所生成的内容就是AIGC AI指代计算机人工智能&#xff0c;模仿人类的智能从而解决问题…