¿Cómo puede javascript en un archivo .js separado acceder a un singleton QML?
Mi biblioteca de JavaScript quiere leer los valores de configuración almacenados en un singleton que se define en TrConfig.qml :
// TrConfig.qml pragma Singleton import QtQml 2.0 QtObject { property var myWidth: 234 }El archivo qmldir contiene
singleton TrConfig 1.0 TrConfig.qml Esto funciona bien desde el interior de los archivos .qml simplemente haciendo referencia TrConfig.<fieldname> . Pero en archivos .js después .import TrConfig as TC , hacer referencia a TC.<fieldname> siempre devuelve indefinido.
// myjslib.js .import QtQml 2.11 as QtQml .import TrConfig as TC function myfunc() { console.log("In myjslib.js myWidth is " + TC.myWidth); // prints "... myWidth is undefined" }Aquí está el archivo .qml principal (ejecutar con "qml Foo.qml"):
// Foo.qml import QtQuick import QtQuick.Controls import "myjslib.js" as J Rectangle { width: TrConfig.myWidth // this works height: 100 color: "red" Component.onCompleted: { console.log("Foo onCompleted: myWidth="+TrConfig.myWidth); J.myfunc(); } }La salida es:
qml: Foo onCompleted: myWidth=234 qml: In myjslib.js myWidth is undefined¡Cualquier ayuda sería muy apreciada!
[Actualizado el 6/11/21 para agregar ".importar TrConfig como TC" en el archivo .js]