在UI5中实现IAsyncContentCreation接口



为了确保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"
],

相关内容

  • 没有找到相关文章

最新更新