2016-12-15 1 views
0

Ich konvertiere eine bestehende Webanwendung in Polymer. Die Webanwendung besteht aus Komponenten (in der Knockout-Komponentenarchitektur) und Modulen. Beide werden mit RequireJS geladen. Ich sehe, wie man die Knockout-Komponenten in benutzerdefinierte Polymer-Elemente konvertiert, aber nicht, wie man mit den JavaScript-Modulen umgeht. RequireJS-Module geben ein JavaScript-Objekt zurück, das an das JavaScript übergeben wird, das davon über einen Parameter an die Funktion "define" gebunden ist. Es scheint keine Möglichkeit zu geben, dieses Objekt zu erhalten, wenn der Modulcode über HTML-Import statt über RequireJS geladen wird.Wie importiere ich ein AMD-Modul in ein benutzerdefiniertes Polymer-Element?

Zum Beispiel verwenden mehrere der vorhandenen Komponenten das Modul moment.js für die Datums-/Uhrzeitbearbeitung. Sie laden es über RequireJS, das ihnen einen Verweis auf das Momentobjekt gab. In einem der Polycast Videos sagt Rob Dobson, dass die empfohlene Vorgehensweise wäre, eine moment.html Datei zu schreiben, die nur einen <script> Tag enthält, um moment.js zu importieren. Ein benutzerdefiniertes Polymerelement kann dann einen HTML-Import von moment.html ausführen, aber das gibt der Komponente keinen Zugriff auf das Objekt, das vom moment.js-Modul zurückgegeben wird. Moment platziert dieses Objekt nicht im globalen Namespace. Wie erhält das benutzerdefinierte Element "Polymer" also Zugriff auf das Momentobjekt?

+0

Ich habe "Moment" mit Polymer verwendet. Das einzige, was Sie tun müssen, ist das Skript mit Quell-Tag zu importieren und dann können Sie es direkt verwenden wie 'moment (date) .format ('D MMM YYYY')' in Ihren ploymer Funktionen – a1626

+0

Diese Verwendung von Moment ist veraltet. Wenn Sie es verwenden, wird diese Meldung in der Konsole ausgegeben: "Warnung bei Verfall: Der Zugriff auf Moment über den globalen Bereich ist veraltet und wird in einer zukünftigen Version entfernt." Der Punkt ist, dass die Module in der Anwendung nichts in den globalen Namespace einfügen, sondern den Verweis auf die abhängige Komponente über die RequireJS-Funktion "define" übergeben. –

+0

Haben Sie eine Bower Installation von Moment gemacht? – a1626

Antwort

0

Das von Justin Fagnani des Teams Polymer.

„Hört sich hier, wie Sie eine Modul-Lader/Registrierung benötigen, die mit Polymer/HTML Imports arbeitet Ich habe so etwas IMD genannt: https://github.com/PolymerLabs/IMD

Es ist nur eine AMD-kompatible Modulregistrierung, aber kein Loader, also müssen alle Module über explizite oder Tags geladen werden, was sicherstellt, dass die Reihenfolge der Abhängigkeiten erhalten bleibt. "

Es macht genau das, was ich gesucht habe.

Verwandte Themen