Dokumentation
Der Play-Router ist in der Lage, Javascript-Code zu generieren, um das Routing von Javascript, das auf der Client-Seite läuft, zurück zu Ihrer Anwendung zu handhaben. Der Javascript-Router hilft beim Refactoring Ihrer Anwendung. Wenn Sie die Struktur Ihrer URLs oder Parameternamen ändern, wird Ihr Javascript automatisch aktualisiert, um die neue Struktur zu verwenden.
§Erstellen eines Javascript-Routers
Der erste Schritt zur Verwendung des Javascript-Routers von Play besteht darin, ihn zu erstellen. Der Router zeigt nur die Routen an, die Sie explizit deklarieren, um die Größe des Javascript-Codes zu minimieren.
Es gibt zwei Möglichkeiten, einen Javascript-Router zu erzeugen. Die eine ist, den Router mit Hilfe von Template-Direktiven in die HTML-Seite einzubetten. Die andere besteht darin, Javascript-Ressourcen in einer Aktion zu generieren, die heruntergeladen, zwischengespeichert und zwischen Seiten ausgetauscht werden kann.
§Embedded router
Ein eingebetteter Router kann mit der @javascriptRouter
-Direktive innerhalb einer Twirl-Vorlage generiert werden. Dies geschieht in der Regel innerhalb der Hauptvorlage für die Dekoration.
@()(implicit request: play.mvc.Http.Request)@helper.javascriptRouter("jsRoutes")( routes.javascript.Users.list, routes.javascript.Users.get)
Der erste Parameter ist der Name der globalen Variablen, in die der Router eingefügt wird. Der zweite Parameter ist die Liste der Javascript-Routen, die in diesem Router enthalten sein sollen.
§Router-Ressource
Eine Router-Ressource kann erzeugt werden, indem eine Aktion erstellt wird, die den Router-Generator aufruft. Die Syntax ist ähnlich wie beim Einbetten des Routers in eine Vorlage:
import play.mvc.Http;import play.routing.JavaScriptReverseRouter;import play.mvc.Controller;import play.mvc.Result;
public Result javascriptRoutes(Http.Request request) { return ok(JavaScriptReverseRouter.create( "jsRoutes", "jQuery.ajax", request.host(), routes.javascript.Users.list(), routes.javascript.Users.get())) .as(Http.MimeTypes.JAVASCRIPT);}
Fügen Sie dann die entsprechende Route hinzu:
GET /javascriptRoutes controllers.Application.javascriptRoutes(request: Request)
Nachdem Sie diese Aktion implementiert und zu Ihrer Routendatei hinzugefügt haben, können Sie sie als Ressource in Ihre Vorlagen einfügen:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
§Using the router
Bei jQuery als Beispiel ist ein Aufruf so einfach wie:
$.ajax(jsRoutes.controllers.Users.get(someId)) .done( /*...*/ ) .fail( /*...*/ );
Der Router stellt auch einige andere Eigenschaften zur Verfügung, darunter url
und type
(die HTTP-Methode). Der obige Aufruf der ajax-Funktion von jQuery kann beispielsweise auch wie folgt erfolgen:
var r = jsRoutes.controllers.Users.get(someId);$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });
Der obige Ansatz ist erforderlich, wenn andere Eigenschaften wie Erfolg, Fehler, Kontext usw. eingestellt werden müssen.
Die absoluteURL
und die webSocketURL
sind Methoden (keine Eigenschaften), die den vollständigen URL-String zurückgeben. Eine Websocket-Verbindung kann wie folgt hergestellt werden:
var r = jsRoutes.controllers.Users.list();var ws = new WebSocket(r.webSocketURL());ws.onmessage = function(msg) { /*...*/};
§jQuery ajax method support
Hinweis: Built-in support for jQuery’s ajax function will be removed in a future release. Dieser Abschnitt über die integrierte Unterstützung dient nur zu Referenzzwecken. Bitte verwenden Sie die ajax-Funktion des Routers nicht in neuem Code und erwägen Sie, bestehenden Code so bald wie möglich zu aktualisieren. Der vorherige Abschnitt über die Verwendung des Routers dokumentiert, wie jQuery verwendet werden sollte.
Wenn jQuery nicht Ihr Ding ist, oder wenn Sie die jQuery ajax-Methode auf irgendeine Weise dekorieren möchten, können Sie dem Router eine Funktion zur Verfügung stellen, die er zur Durchführung von ajax-Abfragen verwendet. Diese Funktion muss das Objekt akzeptieren, das an die ajax
Router-Methode übergeben wird, und sollte erwarten, dass der Router die type
– und url
-Eigenschaften auf die entsprechende Methode und URL für die Router-Anfrage gesetzt hat.
Um diese Funktion zu definieren, übergeben Sie in Ihrer Aktion den ajaxMethod
-Methodenparameter, z.B.:
JavaScriptReverseRouter.create( "jsRoutes", "myAjaxMethod", request.host(), routes.javascript.Users.list(), routes.javascript.Users.get())
Next: Eingebettete Routing-DSL