Rotas da Cenas
A Rota é o endereço que será utilizado para acessar uma Cena.
Para que uma cena seja acessÃvel através de uma Rota, é necessário registrá-la através do objeto singleton CrappUIRouteManager
.
Uma Rota pode ter parâmetros, e portanto deve ser tipada adequadamente para permitir que o compilador ofereça segurança validando os parâmetros passados ao acessar uma rota. Caso seja uma rota sem parâmetro, é recomendado que ela seja tipada com o objeto Nothing
.
A Rota é uma string abstrata do tipo Path<T>
, onde T
é a estrutura de dados necessária para aplicar todos os parâmetros da rota.
Construindo uma Rota
Uma rota deve seguir o padrão de um caminho HTTP, separando cada uma das partes deste caminho utilizando / (barra)
. Um parâmetro deve ser definido como uma parte integral de um caminho. Veja exemplos abaixo:
// Definindo uma rota que não possui parâmetros:
var routeWithoutParam:Path<Nothing> = '/my/route/without/parameters';
// As partes de uma rota devem ser codificadas usando o padrão URLEncode,
// garantindo que caracteres especiais sejam devidamente codificados.
var routeShouldBeEncoded:Path<Nothing> = '/my/encoded%20route';
// Para adicionar parâmetros, basta escrever a rota com uma sintaxe especial.
// Veja como ficaria uma rota contendo um parâmetro chamado "value" do tipo String:
var routeWithStringParam:Path<{value:String}> = '/my/route/{value:String}';
// Agora, com um parâmetro do tipo Int:
var routeWithIntParam:Path<{value:Int}> = '/my/route/{value:Int}';
// É possÃvel ter vários parâmetros em uma mesma rota:
var routeWithMutipleParams:Path<{category_id:Int, filter:String}> = '/products/{category_id:Int}/{filter:String}';
Tipos de Parâmetros da Rota
É possÃvel utilizar 4 tipos de parâmetro para ser transmitido em uma rota, permitindo uma grande variedade de opções na sua composição. Definir o tipo adequado tornará o desenvolvimento mais fácil ao recuperar a informação da rota posteriormente.
String
{value:String}
Qualquer conteúdo desde que esteja devidamente codificada no padrão URLEncode
Int
{value:Int}
Qualquer número inteiro, positivo ou negativo.
Float
{value:Float}
Qualquer númeiro inteiro ou decimal, positivo ou negativo. Para números decimais, o separador deve ser o .(ponto)
.
Bool
{value:Bool}
Apenas as opções true
ou false
, Case-insensitive.
Registrando uma Rota
É necessário uma Cena e uma Rota para efetuar o registro. Ambas devem ter referência ao mesmo tipo para que não ocorra erro de compilação.
// Dê preferência a utilizar typedef para criar para estruturar os parâmetros
typedef RouteParams = {
var id:Int;
var name:String;
}
// Ao criar a Cena, ela deve ter a mesma assinatura utilizada na rota
Class MyScene extends CrappUIScene<RouteParamas> {
override public function setup() {
super.setup();
trace(this.sceneParams.id);
trace(this.sceneParams.name);
}
}
// No local adequado, crie a sua rota contendo a mesma assinatura utilizada pela Cena
var myRoute:Path<RouteParams> = '/my/route/{id:Int}/{name:String}';
// Efetue o registro da rota usando o objeto CrappUIRoute
CrappUIRouteManager.use().register(myRoute, MyScene);
// Para fazer com que sua aplicação navegue até a cena registrada, construa primeiro o caminho...
var buildedPath:String = myRoute.build({id : 10, name : "My Test"}); // -> /my/route/10/My%20Test
// ... e então navegue até ao caminho construÃdo:
CrappUIRouteManager.use().navigate(buildedPath); // -> A cena MyScene será acessada
// Com o exemplo acima, a cena MyScene resultará dois traces:
// trace: 10
// trace: My Test
Rotas sem Parâmetros
Quando tiver utilizando Rotas que não não possuem parâmetros, basta utilizar o objeto Nothing
.
// A propriedade sceneParams será nulo quando não houver parâmetros na cena
Class MyScene extends CrappUIScene<Nothing> {
override public function setup() {
super.setup();
trace(this.sceneParams);
}
}
// No local adequado, crie a sua rota sem parâmetros
var myRoute:Path<Nothing> = '/my/route';
// Efetue o registro da rota usando o objeto CrappUIRoute
CrappUIRouteManager.use().register(myRoute, MyScene);
// Para fazer com que sua aplicação navegue até a cena registrada, construa primeiro o caminho...
var buildedPath:String = myRoute.build(null); // -> /my/route
// ... e então navegue até ao caminho construÃdo:
CrappUIRouteManager.use().navigate(buildedPath); // -> A cena MyScene será acessada
Atualizado
Isto foi útil?