Dokumentation

dec 18, 2021
admin

Play-routern kan generera Javascript-kod för att hantera routning från Javascript som körs på klientsidan tillbaka till ditt program. Javascriptroutern underlättar vid refaktorisering av din applikation. Om du ändrar strukturen på dina webbadresser eller parameternamn uppdateras Javascript automatiskt för att använda den nya strukturen.

§Generera en Javascript-router

Det första steget för att använda Plays Javascript-router är att generera den. Routern kommer endast att exponera de vägar som du uttryckligen deklarerar vilket minimerar storleken på Javascriptkoden.

Det finns två sätt att generera en Javascriptrouter. Det ena är att bädda in routern i HTML-sidan med hjälp av malldirektiv. Det andra är att generera Javascript-resurser i en åtgärd som kan hämtas, cachelagras och delas mellan sidor.

§Inbäddad router

En inbäddad router kan genereras med hjälp av @javascriptRouter-direktivet inuti en Twirl-mall. Detta görs vanligtvis inuti den huvudsakliga inredningsmallen.

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

Den första parametern är namnet på den globala variabel som routern kommer att placeras i. Den andra parametern är listan över Javascript-rutter som ska ingå i den här routern.

§Routerresurs

En routerresurs kan genereras genom att skapa en åtgärd som anropar routergeneratorn. Den har en liknande syntax som att bädda in routern i en mall:

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);}

När du sedan lägger till motsvarande rutt:

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

När du har implementerat den här åtgärden och lagt till den i din ruttfil kan du sedan inkludera den som en resurs i dina mallar:

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

§Användning av routern

Med jQuery som exempel är det så enkelt som att göra ett anrop:

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

Routern gör också några andra egenskaper tillgängliga, inklusive url och type (HTTP-metoden). Ovanstående anrop till jQuerys ajax-funktion kan till exempel också göras på följande sätt:

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

Ovanstående tillvägagångssätt krävs när andra egenskaper behöver ställas in, t.ex. framgång, fel, kontext etc.

absoluteURL och webSocketURL är metoder (inte egenskaper) som returnerar den fullständiga url-strängen. En Websocket-anslutning kan göras på följande sätt:

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

§ Stöd för jQuery ajax-metoden

Anmärkning: Inbyggt stöd för jQuerys ajax-funktion kommer att tas bort i en framtida version. Detta avsnitt om det inbyggda stödet tillhandahålls endast som referens. Använd inte routerns ajax-funktion i ny kod och överväg att uppgradera befintlig kod så snart som möjligt. I det föregående avsnittet om användning av routern dokumenteras hur jQuery bör användas.

Om jQuery inte är din grej, eller om du vill dekorera jQuerys ajax-metod på något sätt, kan du tillhandahålla en funktion till routern som den ska använda för att utföra ajax-förfrågningar. Den här funktionen måste acceptera det objekt som skickas till ajax routermetoden och bör förvänta sig att routern har ställt in egenskaperna type och url på den till lämplig metod och url för routerförfrågan.

För att definiera den här funktionen skickar du i din åtgärd ajaxMethod metodparametern, t.ex.:

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

Nästa: Inbäddad Routing DSL

Lämna ett svar

Din e-postadress kommer inte publiceras.