为了确保sap.ui.core.UIComponent
是完全异步创建的,我们需要实现IAsyncContentCreation
接口:
metadata: {
interfaces: [
"sap.ui.core.IAsyncContentCreation"
],
manifest: "json"
}
没关系。
研究SAP应用程序示例,我发现了以下代码片段,其中硬编码(因此容易出错)的接口名称被可以自动检查的代码替换:
sap.ui.define([
"sap/ui/core/library",
"sap/ui/core/UIComponent",
…
], function(library, UIComponent, models, History) {
"use strict";
return UIComponent.extend("sap.ui.demo.toolpageapp.Component", {
metadata: {
interfaces: [
library.IAsyncContentCreation
],
manifest: "json"
}
…
}
}
我试图检查DevTools中library
的内容,但我得到ReferenceError
异常而不是library
的值:
Uncaught ReferenceError: library is not defined
at eval (eval at init (Component.js:24), <anonymous>:1:1)
at f.init (Component.js:24)
at sap-ui-core.js:315
at f.constructor (sap-ui-core.js:315)
at f.constructor (sap-ui-core.js:585)
at f.constructor (library-preload.js:1154)
at f [as constructor] (sap-ui-core.js:547)
at new o1 (sap-ui-core.js:632)
at H (sap-ui-core.js:628)
at sap-ui-core.js:628
我如何确保library.IAsyncContentCreation
真正正确定义并按预期返回"sap.ui.core.IAsyncContentCreation"
?
我试图检查DevTools中
library
的内容,但我得到ReferenceError
异常。
最有可能的是,您遇到了V8的调试器限制,在调试器会话期间V8不会评估未使用的闭包变量(这里:library
),因此无法从devtool控制台访问。参见为什么Chrome调试器认为关闭的局部变量是未定义的?还有V8版本的#3491
和#2710
。
上述限制仅适用于V8的调试器。当代码在运行时执行时,library.IAsyncContentCreation
将被解析为字符串"sap.ui.core.IAsyncContentCreation"
,因此您不会得到ReferenceError
。
探索SAP应用程序示例,[…]]接口名称被替换为代码。
尚不清楚示例作者最初决定需要核心库的原因。UI5对象中的interfaces
等待字符串字面值。UI5接口是简单的标记接口。标记接口)。它们不指定代码中的任何行为。添加接口名称(字符串字面量)只是告诉实现接口的类应该如何行为。因此,添加字符串字面值就足够了。
interfaces: [
"sap.ui.core.IAsyncContentCreation"
],