SAPUI5基础知识8 - 模块(Module)的使用

1. 背景

在SAPUI5中,几乎所有东西都是一个模块(例如:控件,控制器,组件等等),通过依赖管理,模块间可以相互调用。这样做的好处是,可以仅在需要时才去加载必需的模块,进而提高应用程序的性能。

SAPUI5使用AMD (Asynchronous Module Definition)模式来定义和加载模块,可以使用sap.ui.define来定义一个新的模块,使用sap.ui.require来加载一个模块。

2. 示例

2.1 模块定义

sap.ui.define用于定义一个新的模块。它接受两个参数:

  • 依赖数组(Dependencies Array):这是一个字符串数组,包含了当前模块所依赖的其他模块的名称。
  • 工厂函数(Factory Function):这是一个函数,它的参数是依赖模块的导出值,它的返回值是当前模块的导出值。

定义模块的示例:

sap.ui.define(["sap/ui/core/mvc/Controller"
], function (Controller) {"use strict";return Controller.extend("my.namespace.MyController", {onInit: function () {// Initialization code}});
});

在这个例子中,我们定义了一个新的模块,它依赖于sap/ui/core/mvc/Controller模块,工厂函数返回了一个扩展自Controller的新的控制器类。

2.2 模块加载

sap.ui.require用于加载一个或多个模块。它也接受两个参数:

  • 依赖数组(Dependencies Array):这是一个字符串数组,包含了需要加载的模块的名称。
  • 回调函数(Callback Function):这是一个函数,它的参数是依赖模块的导出值,它将在所有模块都加载完成后被调用。

加载模块的示例:

sap.ui.require(["my/namespace/MyModule"
], function(MyModule) {// Use MyModulevar instance = new MyModule();
});

在这个例子中,我们加载了my/namespace/MyModul模块,并在回调函数中创建了它的一个实例。

注意,模块名称通常与它们的文件路径相对应,例如,模块my/namespace/MyModule通常在文件my/namespace/MyModule.js中定义。

3. 练习

在SAPUI5中,库资源通常也被称为模块资源。在本篇博客的练习中,我们将在上一篇博客练习的基础上,用自sap.m库的MessageToast控件完成消息弹出窗。

3.1 使用消息提示模块

首先,将所需模块的数组中引用sap/m/MessageToast

这样,一但ControllerMessageToast两个模块都加载完毕,回调函数就会被调用,通过访问传递给函数的参数来使用这两个对象。

我们将使用MessageToast对象的show()方法向用户显示“Hello World”文本。

App.controller.js文件中,让我们替换掉JavaScript原生的alert方法,改用MessageToast.show()。

这种异步模块定义(AMD)的语法允许将模块加载与代码执行分开,这样极大地提高了应用程序的性能。因为,浏览器可以在代码执行之前,决定资源何时、如何加载。

在这里插入图片描述
改动后的代码如下:

sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast"
], function (Controller, MessageToast) {"use strict";return Controller.extend("zsapui5.test.controller.App", {onShowHello: function () {MessageToast.show("Hello World");}});
});

show( )方法是一个静态方法,您不需要使用新关键字来实例化MessageToast。

3.2 运行

运行改动后的程序,效果如下:
在这里插入图片描述
点击button "Say Hello"后,会在弹出窗口中显示“Hello World”字符串。

3.3 运行机制

在SAPUI5中,模块的加载和执行是由SAPUI5的模块加载器(也称为资源加载器)处理的。这是一个内置的机制,用于加载和管理JavaScript、CSS和其他资源。

当你在代码中使用sap.ui.define来定义一个模块时,你实际上是在告诉SAPUI5模块加载器这个模块的存在,以及它的依赖关系和实现。然后,当这个模块被其他模块引用,或者被应用程序直接使用时,SAPUI5模块加载器就会加载并执行这个模块。

这个过程是自动进行的,你不需要手动触发模块的加载或执行。只需要正确地定义模块和它的依赖关系,SAPUI5模块加载器就会处理好剩下的事情。

在本篇博客的例子中,我们仅使用了sap.ui.define,对于sap.ui.require,它在SAPUI5中主要用于异步加载模块。当你需要在运行时动态加载某个模块,而不是在定义模块时就加载它,那么你就可以使用sap.ui.require。

例如,你可能有一个模块,它只在某些特定的条件下才需要被加载和使用。在这种情况下,你可以使用sap.ui.require来在需要的时候动态加载这个模块。

总的来说,sap.ui.define和sap.ui.require都是用于加载模块的,但是sap.ui.define是用于定义模块和它的依赖关系,而sap.ui.require是用于在运行时动态加载模块。

4. 小结

本文介绍了额SAPUI5中模块的概念和使用方式,并通过一个示例,介绍了模块的用法。

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

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

相关文章

基于单片机的智能台灯控制系统

摘要: 文章设计一款单片机智能台灯控制系统,实现对台灯的手动和自动控制功能,以 STC89C52 单片机作为多功能智能台灯的主控制器,光电检测模块检测坐姿,红外传感器检测人体,光敏电阻检测光强,同…

VoxEdit 竞赛|为 The Sandbox 土地持有者设计专属奖励资产

邀请大家参与这场精彩的 VoxEdit 竞赛,在元宇宙中发挥你的创造力,并将你的体素技能提升到新的水平! 按此下载 VoxEdit ! https://www.sandbox.game/en/create/vox-edit/ 比赛主题:建筑与古迹 一起潜入建筑和古迹的世…

【面试题】马上金九银十了,简历该准备起来了,面试题你准备好了吗 ?浅谈 JS 浅拷贝和深拷贝

代码展示 let obj_old {name: Tom,age: 15,favorite: {food: bread,drink: milk} } let obj_new {...obj_old} console.log(obj_old obj_new) // false console.log(obj_old.name obj_new.name) // true console.log(obj_old.favorite obj_new.favorite) // true3. Ar…

Redis源码学习:SDS设计与内存管理

为什么Redis选择SDS 1、缓解C语言字符串的缺陷 在 C 语言中可以使用 char* 字符数组来实现字符串。每个字符串分配一段连续的内存空间,依次存放字符串中的每一个字符,最后以null字符结尾。这种设计存在以下问题: 1、低效的操作 每次获取字…

Linux根目录挂载点(/dev/mapper/centos-root)扩容

如果我们在安装系统是采用自定义分区的话,就可以提前规划好这个事情。但是如果平常没注意就直接采用默认安装的方式的话。一旦 根目录的容量耗尽,将会影响业务的运行。今天我们来扩容逻辑卷。 默认安装的话会给home目录分比较多的空间,我们可…

【Leetcode每日一题】 01背包 - DP41 【模板】01背包(难度⭐⭐)(80)

1. 题目解析 题目链接:DP41 【模板】01背包 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 第一问:不超过总体积的背包问题 1. 状态表示 dp[i][j] 表示:从前 i 个物品中挑选&…

汇编语言实验八

目录 一、实验目的 二、实验内容 三.实验步骤以及结果 1、阅读monthtab.asm 程序,要求写出该程序功能,并在实验报告中画出其程序流程图 2.编写一段程序,要求在长度为20的数组(无符号数)中,…

LabVIEW与C#相互调用dll

C#调用LabVIEW创建的dll 我先讲LabVIEW创建自己的.net类库的方法吧,重点是创建,C#调用的步骤,大家可能都很熟悉了。 1、创建LabVIEW项目,并创建一个简单的add.vi,内容就是abc,各个接线端都正确连接就好。 …

云层之间穿梭特效视频转场PR模板素材

12 个超赞的 Premiere Pro 云层穿梭特效视频转场模板 https://prmuban.com/39056.html 📽 你是否正在寻找一种方法,让你的视频更酷、更时尚、更吸引人?今天推荐的12个逼真的云层穿梭特效视频转场模板,绝对能为你的作品锦上添花 ✨…

智赢选品,OZON数据分析选品利器丨萌啦OZON数据

在电商行业的激烈竞争中,如何快速准确地把握市场动态、洞察消费者需求、实现精准选品,是每个电商卖家都面临的挑战。而在这个数据驱动的时代,一款强大的数据分析工具无疑是电商卖家们的得力助手。今天,我们就来聊聊这样一款选品利…

我也认为说 360 无法卸载这一说法,是一个 “彻头彻尾的谣言”

最近,360 公司董事长周鸿祎发布视频回应了 360 无法卸载这一说法,称其是一个 “彻头彻尾的谣言”。他解释道,360 软件完全可以卸载,在设置里面有卸载的入口,通过软件管家也可以正常卸载。不能卸载的说法完全是断章取义…

【UIDynamic-动力学-UIPushBehavior-推行为 Objective-C语言】

一、接下来,我们来说这个,推行为, 1.推行为,首先,它叫做UIPushBehavior, 这个里边呢,又分为持续推力、瞬时推力, 我们新建一个项目,叫做:13-推行为 我们这个里边,还是先来一个redView, UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(100,100,…

【开发】利用SSH端口转发通过阿里云服务器访问实验室设备

文章目录 写在前面公网服务器与实验室服务器连通性公网服务器ping实验室实验室ping公网服务器SSH隧道转发 写在前面 最近实验室搬家,导致无法访问内网,之前搭建的zerotier组网成功利用手机热点访问,但是无奈zerotier的不稳定导致开发效率低&…

B端产品竞品分析-总结版

B端竞品分析的难点 分析维度-业务逻辑复杂 B端产品与C端产品业务模型不同,B端产品主要以业务为导向,因此其业务流程与业务逻辑梳理起来也会较C端产品复杂的多,对于个人能力也有一定的要求,需要我们具备相关领域或行业专业知识。…

猫头虎分享已解决Bug:Array Index Out of Bounds Exception

🐯 猫头虎分享已解决Bug:Array Index Out of Bounds Exception 🐯 摘要 大家好,我是猫头虎,今天我们要聊聊后端开发中经常遇到的一个问题:Array Index Out of Bounds Exception,即 java.lang.…

win10 修改远程桌面端口,在Win10上修改远程桌面端口的要怎么操作

在Windows 10上修改远程桌面端口是一个涉及系统配置的过程,这通常是为了增强安全性或满足特定网络环境的需要。 一、通过注册表编辑器修改远程桌面端口 1. 打开注册表编辑器: - 按下Win R组合键,打开“运行”对话框。 - 在“运行”对话框…

大模型揭秘:AI与CatGPT在实体识别中的创新应用

摘要 尽管大规模语言模型 (LLM) 在各种 NLP 任务上已经取得了 SOTA 性能,但它在 NER 上的性能仍然明显低于监督基线。这是由于 NER 和 LLMs 这两个任务之间的差距:前者本质上是序列标记任务,而后者是文本生成模型。在本文中,我们…

【大数据】—双均线策略(移动平均线)

声明:股市有风险,投资需谨慎!本人没有系统学过金融知识,对股票有敬畏之心没有踏入其大门,今天用另外一种方法模拟炒股,后面的模拟的实战全部用同样的数据,最后比较哪种方法赚的钱多。 量化交易…

《2024云安全资源池 能力指南》

《2024云安全资源池 能力指南》这份报告不仅梳理了云安全资源池的发展历程,还深入探讨了其在当前云计算环境下的重要性和必要性。报告详细分析了云安全资源池的市场需求、技术架构、关键技术以及行业应用案例,为政企用户提供了全面的云安全解决方案。通过资料收集、问卷调研、企…

Unity | Shader基础知识(番外:模型的制作流程)

目录 一、前言 二、模型的诞生 三、模型的表面 四、模型的贴图 五、上完材质的模型 六、材质的来源 七、作者的碎碎念 一、前言 up发现,初学程序,除非你是美术,模型出生,要不然对这些都是萌萌哒(蒙蒙哒&#x…