Dokumentation

dec 18, 2021
admin

Den kan generere Javascript-kode til at håndtere routing fra Javascript, der kører på klientsiden, tilbage til din applikation. Javascript-routeren hjælper med at refaktorisere din applikation. Hvis du ændrer strukturen af dine URL’er eller parameternavne, bliver dit Javascript automatisk opdateret til at bruge den nye struktur.

§Generering af en Javascript-router

Det første skridt i brugen af Play’s Javascript-router er at generere den. Routeren vil kun eksponere de ruter, som du eksplicit erklærer, hvilket minimerer størrelsen af Javascript-koden.

Der er to måder at generere en Javascript-router på. Den ene er at indlejre routeren i HTML-siden ved hjælp af skabelondirektiver. Den anden er at generere Javascriptressourcer i en handling, der kan hentes, cachelagres og deles mellem sider.

§Indlejret router

En indlejret router kan genereres ved hjælp af @javascriptRouter-direktivet inde i en Twirl-skabelon. Dette gøres typisk inde i den primære indretningsskabelon.

@()(implicit request: play.mvc.Http.Request)@helper.javascriptRouter("jsRoutes")( routes.javascript.Users.list, routes.javascript.Users.get)

Den første parameter er navnet på den globale variabel, som routeren skal placeres i. Den anden parameter er listen over Javascript-ruter, der skal indgå i denne router.

§Routerressource

En routerressource kan genereres ved at oprette en handling, der påkalder routergeneratoren. Den har en syntaks, der svarer til at indlejre routeren i en skabelon:

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øj derefter den tilsvarende rute til:

GET /javascriptRoutes controllers.Application.javascriptRoutes(request: Request)

Når du har implementeret denne handling og tilføjet den til din rutefil, kan du derefter inkludere den som en ressource i dine skabeloner:

<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>

§Anvendelse af routeren

Med jQuery som eksempel er det så enkelt som at foretage et kald:

$.ajax(jsRoutes.controllers.Users.get(someId)) .done( /*...*/ ) .fail( /*...*/ );

Routeren stiller også et par andre egenskaber til rådighed, herunder url og type (HTTP-metoden). Ovenstående kald til jQuerys ajax-funktion kan f.eks. også foretages som:

var r = jsRoutes.controllers.Users.get(someId);$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });

Overstående fremgangsmåde er nødvendig, når andre egenskaber skal indstilles, f.eks. succes, fejl, kontekst osv.

Den absoluteURL og den webSocketURL er metoder (ikke egenskaber), som returnerer den komplette url-streng. En Websocket-forbindelse kan oprettes som:

var r = jsRoutes.controllers.Users.list();var ws = new WebSocket(r.webSocketURL());ws.onmessage = function(msg) { /*...*/};

§jQuery ajax-metodeunderstøttelse

Bemærk: Indbygget understøttelse af jQuerys ajax-funktion vil blive fjernet i en fremtidig version. Dette afsnit om den indbyggede understøttelse er kun til rådighed som reference. Brug venligst ikke routerens ajax-funktion i ny kode, og overvej at opgradere eksisterende kode så hurtigt som muligt. I det foregående afsnit om brug af routeren er det dokumenteret, hvordan jQuery skal bruges.

Hvis jQuery ikke er din ting, eller hvis du gerne vil dekorere jQuery ajax-metoden på en eller anden måde, kan du give en funktion til routeren, som den skal bruge til at udføre ajax-forespørgsler. Denne funktion skal acceptere det objekt, der er overgivet til ajax routermetoden, og skal forvente, at routeren har indstillet type– og url-egenskaberne på den til den passende metode og url for routeranmodningen.

For at definere denne funktion skal du i din handling overgive ajaxMethod-metodeparameteren, f.eks.:

JavaScriptReverseRouter.create( "jsRoutes", "myAjaxMethod", request.host(), routes.javascript.Users.list(), routes.javascript.Users.get())

Næste: Indlejret Routing DSL

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.