Spielen! Framework: Best Practice für die Verwendung von URLs in separaten JavaScript-Dateien?

8

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?

    
Jan Thomä 17.11.2010, 21:38
quelle

2 Antworten

12

Generieren Sie in der Hauptvorlage einen Javascript-Router, etwa wie folgt:

%Vor%

Und dann in jeder 'statischen' Javascript-Datei, verwenden Sie diesen Router:

%Vor%     
Guillaume Bort 18.11.2010, 09:25
quelle
5

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:

%Vor%

Zu Ihrer conf/routes Datei hinzufügen:

%Vor%

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:

%Vor%

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.

craigmj 17.11.2011 14:28
quelle