Documentazione
Il router di gioco è in grado di generare codice Javascript per gestire il routing da Javascript in esecuzione lato client alla tua applicazione. Il router Javascript aiuta nel refactoring della tua applicazione. Se cambi la struttura dei tuoi URL o dei nomi dei parametri il tuo Javascript viene automaticamente aggiornato per usare la nuova struttura.
§Generare un router Javascript
Il primo passo per usare il router Javascript di Play è generarlo. Il router esporrà solo i percorsi dichiarati esplicitamente, minimizzando così la dimensione del codice Javascript.
Ci sono due modi per generare un router Javascript. Uno è quello di incorporare il router nella pagina HTML usando le direttive del template. L’altro è quello di generare risorse Javascript in un’azione che può essere scaricata, messa in cache e condivisa tra le pagine.
§Router incorporato
Un router incorporato può essere generato usando la direttiva @javascriptRouter
dentro un template Twirl. Questo è tipicamente fatto all’interno del template principale di decorazione.
@()(implicit request: play.mvc.Http.Request)@helper.javascriptRouter("jsRoutes")( routes.javascript.Users.list, routes.javascript.Users.get)
Il primo parametro è il nome della variabile globale in cui sarà inserito il router. Il secondo parametro è l’elenco delle rotte Javascript che dovrebbero essere incluse in questo router.
§Risorsa router
Una risorsa router può essere generata creando un’azione che invoca il generatore di router. Ha una sintassi simile all’incorporazione del router in un template:
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);}
Poi, aggiungi la rotta corrispondente:
GET /javascriptRoutes controllers.Application.javascriptRoutes(request: Request)
Avendo implementato questa azione e aggiungendola al tuo file di route, puoi poi includerla come risorsa nei tuoi template:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
§Usare il router
Usando jQuery come esempio, fare una chiamata è semplice come:
$.ajax(jsRoutes.controllers.Users.get(someId)) .done( /*...*/ ) .fail( /*...*/ );
Il router rende anche disponibili alcune altre proprietà tra cui il url
e il type
(il metodo HTTP). Per esempio la chiamata di cui sopra alla funzione ajax di jQuery può anche essere fatta come:
var r = jsRoutes.controllers.Users.get(someId);$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });
L’approccio di cui sopra è necessario quando altre proprietà devono essere impostate come successo, errore, contesto ecc.
Il absoluteURL
e il webSocketURL
sono metodi (non proprietà) che restituiscono la stringa url completa. Una connessione Websocket può essere fatta come:
var r = jsRoutes.controllers.Users.list();var ws = new WebSocket(r.webSocketURL());ws.onmessage = function(msg) { /*...*/};
§sostegno al metodo ajax di jQuery
Nota: Il supporto integrato per la funzione ajax di jQuery sarà rimosso in una futura release. Questa sezione sul supporto integrato è fornita solo a scopo di riferimento. Si prega di non usare la funzione ajax del router nel nuovo codice e di considerare di aggiornare il codice esistente il prima possibile. La sezione precedente sull’uso del router documenta come dovrebbe essere usato jQuery.
Se jQuery non fa per te, o se vuoi decorare il metodo jQuery ajax in qualche modo, puoi fornire al router una funzione da usare per eseguire query ajax. Questa funzione deve accettare l’oggetto che viene passato al metodo ajax
del router, e dovrebbe aspettarsi che il router abbia impostato le proprietà type
e url
su di esso con il metodo e l’url appropriati per la richiesta del router.
Per definire questa funzione, nella tua azione passa il parametro ajaxMethod
del metodo, ad esempio:
JavaScriptReverseRouter.create( "jsRoutes", "myAjaxMethod", request.host(), routes.javascript.Users.list(), routes.javascript.Users.get())
Next: Routing DSL incorporato
.