Importieren von JavaScript-Ressourcen in QML
JavaScript-Ressourcen können von QML-Dokumenten und anderen JavaScript-Ressourcen importiert werden. JavaScript-Ressourcen können entweder über relative oder absolute URLs importiert werden. Im Falle einer relativen URL wird der Speicherort relativ zum Speicherort des QML-Dokuments oder der JavaScript-Ressource ermittelt, die den Import enthält. Ist die Skriptdatei nicht zugänglich, tritt ein Fehler auf. Muss das JavaScript von einer Netzwerkressource abgerufen werden, wird der Status „ status “ der Komponente auf „Loading“ gesetzt, bis das Skript heruntergeladen wurde.
JavaScript-Ressourcen können auch QML-Module und andere JavaScript-Ressourcen importieren. Die Syntax einer Import-Anweisung innerhalb einer JavaScript-Ressource unterscheidet sich geringfügig von der einer Import-Anweisung innerhalb eines QML-Dokuments, was im Folgenden ausführlich dokumentiert wird.
Importieren einer JavaScript-Ressource aus einem QML-Dokument
Ein QML-Dokument kann eine JavaScript-Ressource mit der folgenden Syntax importieren:
import "ResourceURL" as QualifierBeispiel:
import "jsfile.js" as LogicImportierte JavaScript-Ressourcen werden immer mit dem Schlüsselwort „as“ qualifiziert. Der Qualifizierer für JavaScript-Ressourcen muss mit einem Großbuchstaben beginnen und eindeutig sein, sodass stets eine Eins-zu-Eins-Zuordnung zwischen Qualifizierern und JavaScript-Dateien besteht. (Dies bedeutet auch, dass Qualifizierer nicht denselben Namen wie integrierte JavaScript-Objekte wie „ Date “ und „ Math “ tragen dürfen.)
Die in einer importierten JavaScript-Datei definierten Funktionen stehen den im importierenden QML-Dokument definierten Objekten über die Syntax „ "Qualifier.functionName(params)" “ zur Verfügung. Funktionen in JavaScript-Ressourcen können Parameter annehmen, deren Typen beliebige QML-Werttypen oder Objekttypen sowie normale JavaScript-Typen sein können. Beim Aufruf solcher Funktionen aus QML gelten die üblichen Regeln zur Datentypkonvertierung für Parameter und Rückgabewerte.
Importe innerhalb von JavaScript-Ressourcen
In „ QtQuick 2.0 “ wurde eine Funktion hinzugefügt, die es JavaScript-Ressourcen ermöglicht, andere JavaScript-Ressourcen sowie QML-Typ-Namespaces mithilfe einer Abwandlung der Standard-QML-Import-Syntax zu importieren (wobei alle zuvor beschriebenen Regeln und Einschränkungen gelten).
Da eine JavaScript-Ressource in „ QtQuick 2.0 “ auf diese Weise ein anderes Skript oder ein QML-Modul importieren kann, wurden einige zusätzliche Semantiken definiert:
- Ein Skript mit Importanweisungen erbt die Importe nicht von dem QML-Dokument, das es importiert hat (der Zugriff auf `Component.errorString` schlägt beispielsweise fehl).
- Ein Skript ohne Importanweisungen erbt die Importe aus dem QML-Dokument, das es importiert hat (der Zugriff auf `Component.errorString` ist beispielsweise erfolgreich).
- Ein gemeinsam genutztes Skript (definiert als `.pragma library`) erbt die Importe aus QML-Dokumenten nicht, selbst wenn das Skript keine anderen Skripte oder Module importiert
Die erste Semantik ist konzeptionell korrekt, da ein bestimmtes Skript von einer beliebigen Anzahl von QML-Dateien importiert werden kann. Die zweite Semantik wird aus Gründen der Abwärtskompatibilität beibehalten. Die dritte Semantik bleibt gegenüber der aktuellen Semantik für gemeinsam genutzte Skripte unverändert, wird hier jedoch im Hinblick auf den neu möglichen Fall (in dem das Skript andere Skripte oder Module importiert) präzisiert.
Importieren einer JavaScript-Ressource aus einer anderen JavaScript-Ressource
Eine JavaScript-Ressource kann eine andere auf folgende Weise importieren:
import * as MathFunctions from "factorial.mjs";Oder:
.import "filename.js" as QualifierErsteres ist die Standard-ECMAScript-Syntax zum Importieren von ECMAScript-Modulen und funktioniert nur innerhalb von ECMAScript-Modulen, die durch die Dateiendung „ mjs “ gekennzeichnet sind. Letzteres ist eine von der „ QML “-Engine bereitgestellte Erweiterung für JavaScript und funktioniert auch mit Nicht-Modulen. Da es sich um eine vom ECMAScript-Standard abgelöste Erweiterung handelt, wird von ihrer Verwendung abgeraten.
Wird eine JavaScript-Datei auf diese Weise importiert, erfolgt der Import mit einem Qualifizierer. Auf die Funktionen in dieser Datei kann dann vom importierenden Skript aus über den Qualifizierer zugegriffen werden (d. h. als ` Qualifier.functionName(params)`).
Manchmal ist es wünschenswert, dass die Funktionen im Importkontext verfügbar sind, ohne dass sie mit einem Qualifizierer versehen werden müssen. In diesem Fall sollten ECMAScript-Module und die JavaScript-Anweisung ` import ` ohne den Qualifizierer ` as ` verwendet werden.
Beispielsweise ruft der unten links stehende QML-Code ` showCalculations() ` in ` script.mjs` auf, das wiederum ` factorial() ` in ` factorial.mjs` aufrufen kann, da es ` factorial.mjs ` mithilfe von ` import` eingebunden hat.
| |
|
Die Funktion ` Qt.include()` bindet eine JavaScript-Datei aus einer anderen ein, ohne ECMAScript-Module zu verwenden und ohne den Import zu qualifizieren. Sie macht alle Funktionen und Variablen aus der anderen Datei im Namensraum der aktuellen Datei verfügbar, ignoriert jedoch alle in dieser Datei definierten Pragmas und Importe. Dies ist keine gute Idee, da ein Funktionsaufruf niemals den Kontext des Aufrufers verändern sollte.
Qt.include() ist veraltet und sollte vermieden werden. Es wird in einer zukünftigen Version von Qt entfernt.
Importieren eines QML-Moduls aus einer JavaScript-Ressource
Eine JavaScript-Ressource kann ein QML-Modul auf folgende Weise importieren:
.import TypeNamespace MajorVersion.MinorVersion as QualifierNachfolgend finden Sie ein Beispiel, das auch zeigt, wie die QML-Typen aus einem in JavaScript importierten Modul verwendet werden können:
.import Qt.test 1.0 as JsQtTest
var importedEnumValue = JsQtTest.MyQmlObject.EnumValue3Dies kann insbesondere nützlich sein, um auf Funktionen zuzugreifen, die über einen Singleton-Typ bereitgestellt werden; weitere Informationen finden Sie unter QML_SINGLETON.
Ihre JavaScript-Ressource kann standardmäßig auf alle Importe der Komponente zugreifen, die die Ressource importiert. Sie hat keinen Zugriff auf die Importe der Komponente, wenn diese als zustandslose Bibliothek deklariert ist (mit „ .pragma library “) oder eine explizite „ .import “-Anweisung enthält.
Hinweis: Die .import-Syntax funktioniert nicht für Skripte, die in WorkerScript
Siehe auch „Definieren von JavaScript-Ressourcen in QML“.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.