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

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年铸器

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值