"Modules that use an anonymous define() call must be loaded with a require() call"



在演练步骤 7:JSON 模型示例中,该应用程序显然按照文档所述工作,但我在控制台中看到以下错误:

错误:使用匿名 define(( 调用的模块必须使用 require(( 调用加载;它们不能通过脚本标记执行或嵌套到其他模块中。

在我未经训练的眼睛看来,我能找到的唯一另一个消息实例似乎处理了一个完全不同的场景。

我已经尝试了Firefox和Chromium,CDN托管与本地托管,两个不同的UI5版本(1.77.0和1.79.0(,都是缩小的和普通的,所以我认为这确实是代码本身的东西。

会是什么?另外,我可以安全地忽略它吗,为什么?

匿名define

调用sap.ui.define([...],...)匿名定义模块,因为第一个参数不是字符串(模块名称模块 ID(,而是模块依赖项的列表。如果省略模块名称,框架将根据模块脚本的引用方式自动确定它。

  • 在 JS 文件内容的顶层使用一次匿名sap.ui.define,而不是多次使用。
  • 当只需要现有模块时,将sap.ui.define替换为sap.ui.require。请参阅我在问题 #2203 ·SAP/openui5 (github.com(.
  • 始终
  • 始终使用相同的已注册模块 ID 前缀对模块进行寻址。 这样可以避免使用不同的模块 ID 冗余注册同一模块,在匿名define方案中,由于框架根据不同的 ID 前缀确定模块 ID,否则会导致多次处理模块定义。

* 模块 ID 前缀可以注册到data-sap-ui-resourcerootssap.ui.loader.config或以前注册jQuery.sap.registerModulePath

命名模块define

sap.ui.define("my/demo/Module",[...] ,...)中的第一个参数手动定义模块的名称,在以下情况下必须传递该名称:

  • 在单个 JS 文件内容中定义现有模块定义中的嵌套模块,但是,根据sap.ui.defineAPI 描述,这是禁止的:

    单个文件不得包含对sap.ui.define的多个调用。

  • 定义由 HTML 中的<script>标记启动的模块。

演练使用SAP/openui5@6302b8f固定,并相应地SAP/openui5-docs#43

最新更新