Ich reorganisiere gerade ein Play! Projekt, wo es viele JS gibt Code in den HTML-Vorlagendateien. Dieser Code sollte nach extern verschoben werden JS-Dateien für bessere Lesbarkeit und schnellere Ladezeiten von Seiten. Jedoch, Wenn ich einfach eine JS-Datei im Öffentlichen Ordner erstelle, werden alle @ {Controller.method} Link-Ersetzungen funktionieren nicht mehr. ich war über das Aufrufen einiger Initialisierungsfunktionen aus dem HTML nachzudenken Vorlagen, die nur die benötigten URLs wie
liefern %Vor%Dies wird jedoch mit jeder URL sehr umständlich und fehleranfällig das ist hinzugefügt. Eine andere Sache ist, dass das I18N auch nicht mehr funktioniert. Damit Was ist die beste Praxis für Szenarien wie diese, wo Sie Ihre haben JS-Code in einer separaten Datei, aber immer noch URL-Generierung und verwenden möchten I18N in Ihrem JS?
Generieren Sie in der Hauptvorlage einen Javascript-Router, etwa wie folgt:
%Vor%Und dann in jeder 'statischen' Javascript-Datei, verwenden Sie diesen Router:
%Vor%Der Trick besteht darin, das Framework dazu zu bringen, Ihr Javascript oder Ihr CSS oder etwas anderes in den statischen Verzeichnissen zu analysieren. Hier ist eine einfache Lösung.
Fügen Sie einen controllers.StaticParser
-Controller hinzu:
Zu Ihrer conf/routes
Datei hinzufügen:
Der Regexp in dieser Route ist sehr wichtig, andernfalls können Sie der Anforderung keine Pfadangabe hinzufügen. Um eine geparste statische Ressource wie ein js-Skript anzufordern, verwenden Sie:
%Vor% Leider können Sie das Format #{script 'test.js' /}
nicht verwenden, da das Skript-Tag nach der statischen Datei sucht. Um dieses Ärgernis zu korrigieren, ist hier ein schamloser Hack des Skript-Tags: das #{parsescript 'test.js'/}
-Tag. Es sollte zu /views/tags/parsescript.tag
gehen:
Es funktioniert genau wie das #{script /}
-Tag, analysiert aber die Datei vor der Rückgabe: #{parsescript 'test.js' /}
Man könnte auch das #{stylesheet /}
-Tag schamlos hacken, aber ich denke, ich habe schon genug Platz belegt.
Tags und Links javascript frameworks playframework external