Documentação
O roteador play é capaz de gerar código Javascript para lidar com o roteamento a partir do Javascript rodando lado cliente de volta para sua aplicação. O roteador Javascript ajuda na refatoração de sua aplicação. Se alterar a estrutura das suas URLs ou nomes de parâmetros o seu Javascript é automaticamente actualizado para usar essa nova estrutura.
§Gerar um router Javascript
O primeiro passo para usar o router Javascript do Play é gerá-lo. O router apenas irá expor as rotas que você declara explicitamente, minimizando assim o tamanho do código Javascript.
Existem duas formas de gerar um router Javascript. Uma é incorporar o roteador na página HTML usando diretrizes modelo. A outra é gerar recursos Javascript em uma ação que pode ser baixada, em cache e compartilhada entre páginas.
§Roteador embutido
Um roteador embutido pode ser gerado usando a diretiva @javascriptRouter
dentro de um template Twirl. Isto é normalmente feito dentro do template principal de decoração.
@()(implicit request: play.mvc.Http.Request)@helper.javascriptRouter("jsRoutes")( routes.javascript.Users.list, routes.javascript.Users.get)
O primeiro parâmetro é o nome da variável global na qual o roteador será colocado. O segundo parâmetro é a lista de rotas Javascript que devem ser incluídas neste roteador.
§Router resource
Um recurso de roteador pode ser gerado através da criação de uma ação que invoque o gerador do roteador. Ele tem uma sintaxe similar para incorporar o roteador em um 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);}
Então, adicione a rota correspondente:
GET /javascriptRoutes controllers.Application.javascriptRoutes(request: Request)
Having implementou esta ação, e adicionando-a ao seu arquivo de rotas, você pode então incluí-la como um recurso em seus templates:
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
§Usando o router
Usando jQuery como exemplo, fazer uma chamada é tão simples como:
$.ajax(jsRoutes.controllers.Users.get(someId)) .done( /*...*/ ) .fail( /*...*/ );
O router também disponibiliza algumas outras propriedades, incluindo o url
e o type
(o método HTTP). Por exemplo, a chamada acima para a função ajax do jQuery também pode ser feita como:
var r = jsRoutes.controllers.Users.get(someId);$.ajax({url: r.url, type: r.type, success: /*...*/, error: /*...*/ });
A abordagem acima é necessária quando outras propriedades precisam ser definidas como sucesso, erro, contexto, etc.
O absoluteURL
e o webSocketURL
são métodos (não propriedades) que retornam a string url completa. Uma conexão Websocket pode ser feita como:
var r = jsRoutes.controllers.Users.list();var ws = new WebSocket(r.webSocketURL());ws.onmessage = function(msg) { /*...*/};
§jQuery ajax method support
Note: Suporte embutido para a função ajax do jQuery será removido em uma versão futura. Esta seção sobre o suporte integrado é fornecida apenas para fins de referência. Por favor não utilize a função ajax do router em novo código e considere actualizar o código existente o mais rápido possível. A secção anterior sobre o uso do router documenta como jQuery deve ser usado.
Se jQuery não é a sua coisa, ou se você quiser decorar o método jQuery ajax de alguma forma, você pode fornecer uma função ao router para usar para executar consultas ajax. Esta função deve aceitar o objecto que é passado para o método ajax
router, e deve esperar que o router tenha definido as propriedades type
e url
para o método apropriado e url para a requisição do router.
Para definir esta função, na sua acção passe o parâmetro ajaxMethod
método, ex:
JavaScriptReverseRouter.create( "jsRoutes", "myAjaxMethod", request.host(), routes.javascript.Users.list(), routes.javascript.Users.get())
Next: Roteamento incorporado DSL