首页 > 其他分享 >如何理解 SAP UI5 的 sap.ui.define 函数?

如何理解 SAP UI5 的 sap.ui.define 函数?

时间:2023-12-02 18:23:14浏览次数:44  
标签:导出 UI5 模块 ui sap ID define

我们在 SAP UI5 官网能查到 sap.ui.define 的详细文档:

在一个 JavaScript 文件中,通常和建议的做法是在文件顶部有一个对 sap.ui.define 的调用。当通过其模块 ID 首次请求一个模块时,会根据 ID 和当前配置来确定对应的资源。该资源将被加载并执行,这将反过来执行顶级的 sap.ui.define 调用。

如果在调用 sap.ui.define 时省略了模块 ID,那么将使用用于请求模块的 ID 作为替代。作为准备步骤,将加载模块的依赖项以及它们的传递依赖项。然后,确定模块值(其导出值):如果给定了一个静态值(对象,字面量)作为 vFactory,那么该值将是模块值。如果给定了一个函数,那么将调用该函数(将声明依赖项的模块导出作为参数提供给函数),并使用其返回值作为模块导出值。框架在内部将结果值与模块 ID 关联,并将其提供给模块的原始请求者。无论何时再次请求该模块,都将返回相同的导出值(模块只执行一次)。

在详细解释这个函数的工作机制之前,首先需要理解几个关键的概念:模块 ID、依赖项和导出值。

模块 ID 是一个字符串,它唯一标识了一个模块。在 SAP UI5 中,模块 ID 通常与其对应的文件路径相对应。例如,模块 ID "sap/m/Button" 对应于文件 "sap/m/Button.js"。模块 ID 用于在其他模块中引用该模块。

依赖项是一个模块所依赖的其他模块的列表。在 sap.ui.define 的调用中,依赖项是作为一个数组传递的,数组中的每一项都是一个模块 ID。当定义一个模块时,这个模块的所有依赖项都需要在它之前加载。

导出值是一个模块提供给其他模块使用的接口。这可以是任何 JavaScript 值,包括对象、函数、数字、字符串等。如果模块没有导出值,那么它通常是一个“副作用模块”,即它在加载时执行一些操作,但不提供任何可以由其他模块使用的接口。

define 方法是 SAP UI5 中定义 JavaScript 模块的关键工具。该方法用于指定模块的 ID、依赖关系以及模块导出值或工厂函数。推荐的使用方式是在一个 JavaScript 资源(文件)中进行一次顶层的 sap.ui.define 调用。

当首次请求一个模块的时候,系统会根据模块的 ID 和当前的配置确定相应的资源。该资源将被加载和执行,进而执行顶层的 sap.ui.define 调用。如果在调用中省略了模块 ID,系统将用请求模块时使用的 ID 进行替代。在准备阶段,将加载模块的依赖关系以及它们的传递依赖关系。

接下来,将确定模块的值(即其导出值):如果 vFactory 参数是一个静态值(对象、字面量),那么该值将成为模块的导出值。如果 vFactory 是一个函数,系统将调用该函数,并将声明的依赖项的模块导出值作为参数传递给该函数。该函数的返回值将被用作模块的导出值。

框架在内部将导出值与模块 ID 关联,并将其提供给模块的原始请求方。之后,每当再次请求相同的模块时,都将返回相同的导出值。这意味着模块只会执行一次,后续的请求将直接获取缓存的导出值。

下面详细说明 sap.ui.define 方法的主要组成部分和使用方式:

1. 模块定义

通过 sap.ui.define 方法,可以定义一个 JavaScript 模块。在定义模块时,需要指定模块的 ID、依赖项和工厂函数。例如:

sap.ui.define("myModule", ["dependency1", "dependency2"], function(dependency1, dependency2) {
  // 模块的实现
  var myModuleValue = {
    property1: dependency1,
    property2: dependency2
  };

  // 返回模块的导出值
  return myModuleValue;
});

在上述例子中,模块的 ID 是 "myModule",依赖项包括 "dependency1" 和 "dependency2",工厂函数接收这两个依赖项的导出值,并返回一个包含属性的对象作为模块的导出值。

2. 模块加载和执行

当首次请求模块时,框架将按照模块的 ID 和当前配置确定相应的资源。然后,加载该资源并执行顶层的 sap.ui.define 调用。如果在定义模块时省略了模块 ID,系统将用请求模块时使用的 ID 进行替代。

在加载模块之前,系统会递归加载模块的所有依赖项及其传递依赖项。这确保了在执行模块代码之前,所有必要的依赖项都已加载和准备就绪。

3. 模块导出值

模块的导出值可以是一个静态值(对象、字面量)或一个工厂函数的返回值。如果 vFactory 参数是一个静态值,那么该值将直接成为模块的导出值。如果 vFactory 是一个函数,系统将调用该函数,并将声明的依赖项的模块导出值作为参数传递给该函数。该函数的返回值将成为模块的导出值。

// 模块定义
sap.ui.define("myModule", ["dependency1", "dependency2"], function(dependency1, dependency2) {
  // 模块的实现
  var myModuleValue = {
    property1: dependency1,
    property2: dependency2
  };

  // 返回模块的导出值
  return myModuleValue;
});

在上述例子中,myModuleValue 是模块的导出值,它是一个包含两个属性的对象,这两个属性分别对应模块的两个依赖项的导出值。

4. 模块的执行次数

模块只会在首次请求时执行一次。之后,无论多少次请求相同的模块,都将直接返回缓存的导出值。这有助于提高性能,避免重复的模块加载和执行。

5. 使用建议

推荐将 sap.ui.define 放置在每个 JavaScript 资源的顶层,并确保每个模块都有唯一的模块 ID。这样可以保持代码的清晰结构,避免命名冲突,并充分利用模块系统的优势。

总体而言,sap.ui.define 是 SAP UI5 中模块定义的核心方法,通过它,可以实现模块化开发、依赖管理以及代码的动态加载和执行。

标签:导出,UI5,模块,ui,sap,ID,define
From: https://www.cnblogs.com/sap-jerry/p/17871977.html

相关文章

  • 关于 SAP ABAP System Change Option 的设置
    在传输组织器(事务SE09)中,选择导航路径的起点转到下一步导航步骤传输组织器工具导航路径的终点。这将带我们进入TransportOrganizerTools概述。转到管理并启动程序设置系统更改选项。全局设置选项允许确定存储库或独立于客户端的定制中的对象是否可以全局修改。只有将全......
  • 关于 SAP Spartacus 层的 UI 设计
    Spartacus每个UI划分成不同的区域section,每个区域由若干个slots组成。每个slot可以包含一个或多个CMSComponent.以homepage为例,其实现的HTML位置:projects\storefrontlib\src\layout\main\storefront.component.html看这个header区域:这个header区域分配的slo......
  • 什么是 SAP ABAP 的 Draft Handling 特性
    ABAP中的Drafthandling是SAPFiori应用程序中的一个重要特性,它允许用户保存他们正在工作的实体的未完成的状态,这可以使得用户在任何时候停止工作,然后在稍后的任何时间点继续。这种方式不仅保存了实体的数据,而且也保持了用户的UI状态,例如滚动位置,焦点等。Drafthandling......
  • SAP Spartacus BREAKPOINT 枚举类型在 Spartacus layout 实现中的作用
    BREAKPOINT在SAPSpartacusStorefront开源项目中是一个枚举类型,用于定义不同屏幕大小的断点。这个枚举类型默认包含五个屏幕名称:xs、sm、md、lg、xl,分别表示extrasmall、small、medium、large、extralarge的屏幕尺寸。这些尺寸通常与响应式设计中的断点概念相关联,用于确定......
  • 如何将 sap.ui.Table 控件的背景设置成透明
    笔者曾经写过一篇文章,介绍了如何在SAPUI5应用里设置背景图片:下图1是背景图片,图2是把这个背景图片加到SAPUI5应用之后的效果。https://blog.csdn.net/i042416/article/details/134643986后来有朋友追问:如果我的SAPUI5应用里使用的表格控件,没有用响应式表格sap.m.Tab......
  • ABAP Draft handling 在 SAP 现代 Fiori 应用中的重要作用
    在SAPABAP开发中,"Drafthandling"(草稿处理)是指一种处理业务对象的机制,使用户能够在事务过程中保存未提交的更改,以便随时回到之前的状态或者在适当的时候提交更改。这个机制的实现允许用户在长时间的事务中保存中间状态,而不必担心数据的不一致性或者丢失。"Drafthandling"的核......
  • 什么是 SAP ABAP Modification-free enhancements
    "Modification-freeenhancements"是SAPABAP中一种开发技术,旨在允许开发者对SAP标准对象进行增强而无需进行修改。这种方法可以确保在将来升级或应用支包时,不会影响到已有的修改。Modification-freeenhancements的主要思想是通过使用EnhancementFramework提供的工具,如......
  • 如何给 SAP UI5 应用设置背景图片试读版
    本需求来自笔者的知识星球。一个朋友询问如何给开发好的SAPUI5应用设置一个背景图片。其实这个需求,按照咱们之前学习的内容,已经可以实现了。假设下面是我事先准备好的一张背景图片。我的需求是想把这张图片,平铺在我的SAPUI5应用里。做出来的效果如下:本需求的实现,利用......
  • 我的心血之作:一套适合 SAP UI5 从业人员从入门到进阶的学习教程,以及教程背后的故事
    一转眼2023年又要结束了。我从2007年开始,以软件开发工程师的角色进入职场,马上也快满17年了。在这快17年的软件开发职业生涯里,我也见识并使用了许许多多的开发技术,编程语言,开发框架,平台。IT界这十多年来涌现出的一些新技术,我也主动或被动地去追逐过。比如2015年时,大......
  • SAP ABAP 各种增强技术(Enhancement)概述 - 所谓第一代,第二代,第三代增强技术的出处试
    本文回答笔者这篇教程:如何通过增强(Enhancement)的方式给SAPABAP标准程序增添新功能评论区的读者留言:这个和第一二三四代以及badi增强有什么联系呢?笔者从2007年一月就在SAP中国使用ABAP进行SAP产品开发了,说实话SAP内部不会把ABAP各种增强技术简单得冠之以第一......