在演练步骤 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-resourceroots
、sap.ui.loader.config
或以前注册jQuery.sap.registerModulePath
。
命名模块define
sap.ui.define("my/demo/Module",[...] ,...)
中的第一个参数手动定义模块的名称,在以下情况下必须传递该名称:
- 在单个 JS 文件内容中定义现有模块定义中的嵌套模块,但是,根据
sap.ui.define
API 描述,这是禁止的:单个文件不得包含对
sap.ui.define
的多个调用。 - 定义由 HTML 中的
<script>
标记启动的模块。
演练使用SAP/openui5@6302b8f
固定,并相应地SAP/openui5-docs#43
。