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.xdnf.cn/news/1488856.html

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

相关文章

什么是反射以及反射的应用及例子

反射是Java中框架设计的核心&#xff0c;通过对类的构造、属性、方法等数据的获取提供抽象的底层构建。 反射机制&#xff1a; 反射需要先获得类的class字节码&#xff0c;由JVM类加载器(ClassLoader)负责加载&#xff0c;并在内存中缓存class的内部结构。借助于Java的反射机制…

面试常考Linux指令

文件权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制&#xff0c;在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable)&#xff0c;分为三组。分别对应文件的属主(owner)&#xff0c;属组(group)和其他用…

腾讯智影PC端“智能画布”功能上线

随着人工智能技术的不断发展&#xff0c;图片编辑领域也迎来了创新的变革。腾讯智影PC端近日推出了一项革命性的新功能——“智能画布”&#xff0c;它将AI绘画技术与传统图片编辑相结合&#xff0c;为用户带来了前所未有的便捷体验。 腾讯智影官网 地址&#xff1a;点击此处…

【Sentinel】Sentinel超简单入门,一看就懂!!!

sentinel入门 一、什么是Sentinel1.1、流量控制1.2、熔断降级1.3、热点参数限流1.4、系统负载保护 二、资源和规则的概念三、Sentinel工作主流程四、代码初体验五、集成控制台 一、什么是Sentinel Sentinel 是阿里巴巴开源的流量控制组件&#xff0c;主要用来保护微服务和分布…

Can we Deploy Web Application in Azure OpenAI of Production Level

题意&#xff1a;我们可以在Azure OpenAI中部署生产级别的Web应用程序吗 问题背景&#xff1a; I have created azure ai search service and used Text split skillset and made index. I also deployed a web Application but have a question that If I want to create to …

《Milvus Cloud向量数据库指南》——BGE-M3:多功能、多语言、多粒度的文本表示学习模型

引言 在自然语言处理(NLP)领域,随着大数据时代的到来,对文本信息的精准处理与高效检索成为了研究热点。BERT(Bidirectional Encoder Representations from Transformers)作为近年来NLP领域的里程碑式模型,以其强大的上下文理解能力在多项任务中取得了显著成效。然而,面…

鼠标视觉特效ClickShow

录课、直播都希望能清晰看到鼠标在屏幕上的移动轨迹以及点击动作。WIndows默认是不支持的&#xff0c;为此我找了好久&#xff0c;终于在开源平台github上找到一个精品&#xff0c;这个软件就叫ClickShow。 1.软件基本信息 官网&#xff1a;GitHub - cuiliang/ClickShow: 鼠标…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中&#xff0c;高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限&#xff0c;这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率&#xff0c;DolphinDB 目前在 Web 上…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

如何评价估计量的好坏

目录 三大方法 概念 无偏性 如何计算估计量的无偏性&#xff1f; 步骤 有效性 有效性在不同类型的数据分析中如何评估&#xff1f; 步骤 一致性 一致性原则在实际应用中的挑战有哪些&#xff1f; 挑战 在大样本情况下&#xff0c;如何准确测量估计量的一致性&#xf…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中&#xff0c;如果你需要在集群或者远程操作没有root权限的机子&#xff0c;安装GDB&#xff08;GNU调试器&#xff09;可能会有些限制&#xff0c;因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…

网络安全科普:网络准入控制系统哪个软件最好?

场景&#xff1a; 企业会议室&#xff0c;两人正在进行关于网络安全的讨论。 张无忌&#xff1a;&#xff08;翻阅资料&#xff09;赵姑娘&#xff0c;我听说网络准入控制系统&#xff08;NAC&#xff09;是提升网络安全的重要手段&#xff0c;但具体它有哪些功能呢&#xff1f…

Linux构建远程YUM仓库与NFS共享存储服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下&#xff0c;初始分支称为 main; 如果使用 Git 2.28.0 或更高版本&#xff0c;则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本&#xff0c;则可以使用 git symbo…

<数据集>水果识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;10012张 标注数量(xml文件个数)&#xff1a;10012 标注数量(txt文件个数)&#xff1a;10012 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Watermelon, Orange, Grape, Apple, peach, Banana, Pineapple] 序…

Redis常用指令(不定期更新)

Redis常用指令&#xff08;不定期更新&#xff09; 查询指定前缀key的数量查看键空间事件开启键空间通知 查询指定前缀key的数量 查询【TEST前缀】的key数量 EVAL "return #redis.call(keys,TEST:*)" 0返回信息 查看键空间事件 config get notify-keyspace-even…

Python | Leetcode Python题解之第284题窥视迭代器

题目&#xff1a; 题解&#xff1a; class PeekingIterator:def __init__(self, iterator):self.iterator iteratorself._next iterator.next()self._hasNext iterator.hasNext()def peek(self):return self._nextdef next(self):ret self._nextself._hasNext self.itera…

AI绘画美女图如何带货? 分享最容易的起号方式,一定别错过!!

学习AI绘画最好的工具有两种。 一个是Midjourney&#xff0c;新手只需要知道提示词怎么写就可以了。 不懂得写&#xff0c;就直接去抄&#xff0c;去复制粘贴&#xff0c;AI绘画最值得鼓励的就是抄。 先学会抄&#xff0c;再考虑改&#xff0c;国外有很多设计师赚钱的方式就…

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…

原型图设计指南:从基础到精通

用户体验设计师和原型设计的主要功能 PM、网站开发工程师通过展示产品内容、结构和粗略布局来沟通最初产品设想的重要工具&#xff0c;说明用户将如何与产品互动&#xff0c;而不是视觉设计。在大厂中&#xff0c;岗位分工更加细致明确&#xff0c;大部分原型都是产品经理做的&…