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 MyModule
   var 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中模块的概念和使用方式,并通过一个示例,介绍了模块的用法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【力扣】从前序与中序遍历序列构造二叉树

🔥博客主页: 我要成为C领域大神 🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于分享知识,欢迎大家共同学习和交流。 给定两个整数数…

React+TS 从零开始教程(3):useState

源码链接:下载 在开始今天的内容之前呢,我们需要先看一个上一节遗留的问题,就是给属性设置默认值。 我们不难发现,这个defaultProps已经被废弃了,说明官方并不推荐这样做。其实,这个写法是之前类组件的时候…

SpringCloud Alibaba Sentinel 流量控制之流控效果实践总结

当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制的效果包括以下几种:直接拒绝、Warm Up、匀速排队/排队等待。对应 FlowRule 中的 controlBehavior 字段。 注意:若使用除了直接拒绝之外的流量控制效果,则调用关系限流…

【JS】上传文件显示文件的为空,显示的文件参数内容只有uid

上传的文件参数file里面只包含uid,没有其他信息 例子解决办法 例子 例如使用elment ui的el-upload组件上传文件,会导致上传的文件参数file里面只包含uid,没有其他信息,如图: 正确应为如下图: 解决办法 …

视图(views)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 下面通过一个例子讲解在Django项目中定义视图,代码如下: from django.http import HttpResponse # 导入响应对象 impo…

Idea启动服务报 Command line is too long

一、背景 合不同分支代码后,启动服务报 Error running Application, Command line is too long, Shorten the command line via JAR manifest or via a classpath file and rerun. 没有在意,然后点击了manifest 来进行 二、问题 然后自己在重新启动&…

情绪管理篇:让七情自然流露,不过分压抑也不掺杂极端的想法即可来去自如

情绪管理篇: 人有七情,本属常理,该哭的时候哭、该笑的时候笑、该怒的时候怒、该忧的时候忧 学习圣贤之学,并非让我们像木头人一样,枯木死灰,而要让自己不要被七情所缠缚、被七情所乱心,我们的喜…

最新《pvz植物大战僵尸杂交版》整合安装包,全面支持Android、ios、Windows,附教程!

今天,阿星要聊聊最近全网大火的一款老游戏——《植物大战僵尸》杂交版。 虽然它不是什么3A大作,但在阿星的心里,它永远是那个让人回味无穷的经典。记得十年前,阿星和大多数玩家一样,玩的都是盗版。那时候的《植物大战…

三品PDM电子行业解决方案介绍 电子企业PDM应用效果

随着全球化和技术创新的不断推进,电子行业正经历着前所未有的发展机遇。然而,随之而来的挑战也日益凸显,尤其是在产品数据管理PDM方面。本文将探讨电子行业在PDM方面的需求,并提出相应的解决方案,以帮助企业提升效率和…

项目中eventbus和rabbitmq配置后,不起作用

如下:配置了baseService层和SupplyDemand层得RabbitMQ和EventBus 但是在执行订阅事件时,发送得消息在base项目中没有执行,后来发现是虚拟机使用得不是一个,即上图中得EventBus下得VirtualHost,修改成一直就可以了

Latex学习之“usefont”用法

Latex学习之“\usefont”用法 一、通俗的解释 \usefont 是 LaTeX 中的一个命令,用于在文档中临时改变字体,其基本语法如下: \usefont{字体编码}{字体族}{字体系列}{字体形状}这样看起来好像蛮抽象,你可能以及晕了,什…

警告,恶意域名疯狂外联,原因竟然是……

前言 在某个风和日丽的下午,突然收到客户那边运维发过来的消息说我司的DTA设备在疯狂告警,说存在恶意域名外联,我急忙背上小背包前往客户现场,经过与客户协同排查,最终确定该事件为一起挖矿病毒引起的恶意域名外联事件…

鸿蒙开发系统基础能力:【@ohos.hiTraceChain (分布式跟踪)】

分布式跟踪 本模块提供了端侧业务流程调用链跟踪的打点能力,包括业务流程跟踪的启动、结束、信息埋点等能力。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import hi…

xss初识(xss-lab)

XSS跨站脚本 XSS漏洞概述 XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(Cascading Style Sheets) 重名,所以改为XSS。 XSS主要基于javascript语言完成恶意的攻击行为,因为javascri…

C++多线程异步日志实现

使用C11标准&#xff0c;构建了一个方便使用的、轻量化的日志系统。封装线程安全的lockQueue&#xff0c;实现对每条日志添加信息、push到lockQueue中的LogTmp类&#xff0c;实现一个多线程异步的日志系统Logger。 lockqueue.h #pragma once #include <queue> #include…

学期结束如何发布期末成绩?

当期末的试卷最后一张被收起&#xff0c;当教室里的喧嚣逐渐沉寂&#xff0c;学生们的心中充满了对成绩的期待与忐忑。期末成绩&#xff0c;关乎着学生的心情&#xff0c;更关系到他们的未来学习动力。那么&#xff0c;如何在保护学生隐私的同时&#xff0c;高效地公布成绩呢&a…

分享:Khoj:你的全能AI助手

在数字化时代&#xff0c;我们每天都会面对海量的信息&#xff0c;如何高效地管理和检索这些信息&#xff0c;同时提升工作效率&#xff0c;成为了许多人关注的焦点。为此&#xff0c;Khoj应运而生——一个功能强大、灵活多变的个人化AI助手&#xff0c;旨在助力用户轻松驾驭信…

双jdk切换

现在因为业务需求单一jdk8已经不满足日常需求了,以我为例之前用的jdk8,但是最新的一个项目用的是17版本的,没招了就下载配置的一套,需要手动切换用哪个版本的步骤如下 jdk8就自己安装配置吧,这只说在有8的版本上在配置17 1.下载一个17win的包(不下载exe) Java Downloads | O…

使用深度相机D435i+YOLOv8实现物体三维坐标实时显示

一、获取相机内参 下列指令为获取相机内参指令&#xff0c;输入此指令前需要获得相机的深度帧和彩色帧数据。 如何使用vsCode打开intel D435i深度相机 # 获取相机内参 depth_intrinsics depth_frame.profile.as_video_stream_profile().intrinsics color_intrinsics color…

Bootstrap和Bagging算法以及衍生算法

1. Bootstrap算法 实际上就是一种针对小样本的无放回式的抽样方法&#xff0c;通过方差的估计可以构造置信区间。 其核心思想和基本步骤如下&#xff1a;   &#xff08;1&#xff09; 采用重抽样技术从原始样本中抽取一定数量&#xff08;自己给定&#xff09;的样本&#…