Para garantizar que sap.ui.core.UIComponent se cree de forma totalmente asincrónica, debemos implementar la interfaz IAsyncContentCreation :
metadata: { interfaces: [ "sap.ui.core.IAsyncContentCreation" ], manifest: "json" } Eso está totalmente bien.
Al explorar las muestras de aplicaciones de SAP, descubrí el siguiente fragmento de código, donde el nombre de la interfaz codificado y, por lo tanto, propenso a errores, se reemplaza con el código, que se puede verificar automáticamente:
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" } … } } Intenté verificar el contenido de la library en DevTools, pero obtengo una excepción ReferenceError en lugar de los valores de la 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 ¿Cómo puedo asegurarme de que library.IAsyncContentCreation esté realmente correctamente definido y devuelva "sap.ui.core.IAsyncContentCreation" según lo previsto?
Intenté verificar el contenido de la
libraryen DevTools, pero obtengo una excepciónReferenceError.
Lo más probable es que haya encontrado la limitación del depurador de V8, donde las variables de cierre no utilizadas (aquí: library ) no son evaluadas por el V8 durante la sesión del depurador y, por lo tanto, no se puede acceder a ellas desde la consola de devtool. Consulte ¿Por qué el depurador de Chrome cree que la variable local cerrada no está definida? y también los números V8 # 3491 y # 2710 .
La limitación anterior se aplica solo al depurador de V8. Cuando el código se ejecuta en tiempo de ejecución, library.IAsyncContentCreation se resolverá en la cadena "sap.ui.core.IAsyncContentCreation" como se esperaba, por lo que no obtendrá ReferenceError .
Explorando las muestras de las aplicaciones de SAP, [...] el nombre de la interfaz se reemplaza con el código.
No está claro por qué el autor de la muestra decidió requerir la biblioteca principal en primer lugar. Esas interfaces en UI5 Objects esperan literales de cadena. Y las interfaces UI5 son interfaces de marcadores simples (también conocidas como interfaces de etiquetado). No especifican ningún comportamiento en el código. Agregar el nombre de la interfaz (literal de cadena) simplemente indica cómo se supone que debe comportarse la clase que implementa la interfaz. Por lo tanto, agregar el literal de cadena es suficiente.
interfaces: [ "sap.ui.core.IAsyncContentCreation" ],