post thumbnail

Ember.js desde Cero: Rutas (Router)

Publicado Por: Carlos Picca, El 23/10/2013


Detalles del Curso:

Dificultad: Aprendiz

Duración: 20 min


Bienvenidos Ember.js desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe todo lo relacionado con los observadores dentro de Ember.js. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 5 - Arquitectura)

Hoy, vamos a aprender todo lo relacionado con las rutas y router dentro de Ember.js.

¡Alerta!

Todos los ejemplos usados en el tutorial de son una continuación de los ejemplos del capitulo anterior.

¿Cómo crear rutas en Ember.js?

Lo primero que tenemos que hacer para crear rutas o routes en Ember.js es definirlas o mapearlas con la ayuda de App.Router.map. Veamos como hacerlos:

Agreguemos al archivo index.html las siguientes lineas:

App.Router.map(function() {
                this.route("nosotros");
                this.route("contacto");
            });

Observemos lo siguiente:

  • Dentro de App.Router.map definimos todas las rutas que nuestra app necesite.
  • Para definir una ruta solo debemos utilizar la siguiente linea de comando this.route(“nombre_de_la_ruta”). Lo único que tenemos que hacer es suplantar “nombre_de_la_ruta” con el nombre de la ruta que deseemos crear.
  • Con this.route("nosotros") y this.route("contacto") creamos dos rutas una para la pagina de nosotros y otra para la pagina de contacto.

Lo segundo que debemos hacer es crea los templates o plantilla que estas rutas van a renderizar (no te preocupes si no entiendes los templates o plantillas en este momento, los vamos a estar cubriendo en su totalidad en un próximo capitulo de la serie).

Para esto vamos a agregar al archivo index.html lo siguiente:

<script type="text/x-handlebars" data-template-name="nosotros">
  <h1>
    La pagina de nosotros!
  </h1>
</script>

<script type="text/x-handlebars" data-template-name="contacto">
  <h1>
    La pagina de contacto!
  </h1>
</script>

Observemos que los templates que creamos son súper sencillos como el que creamos para renderizar la pagina del index. Contienen un titulo y los headers necesarios para poder probar las rutas en el explorador.

El archivo index.html debería lucir así:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Aprendamos Ember.js en Codehero!</title>
        <script src="jquery.min.js"></script>
        <script src="handlebars.js"></script>
        <script src="ember.js"></script>
        <script>
            window.App = Ember.Application.create();

            App.Router.map(function() {
                this.route("nosotros");
                this.route("contacto");
            });

            var cuentaGlobal = 0;

            var Marcapagina = Ember.Object.extend({

                convertir_en_link: function() {
                    return "<a href='" + this.get("url") + "'>"
                            + this.get("nombre")
                            + "</a>";
                }
                ,link: function() {
                    return this.convertir_en_link();
                }.property("nombre", "url")

                ,detalle: function() {
                    return 'Link: ' + this.get('link') + '; Nombre: ' + this.get('nombre') + '; Url: ' + this.get('url');
                }.property('link', 'nombre', 'url')

                ,modificarCuenta: Ember.observer(function() {
                    cuentaGlobal += 1;
                    console.log("El valor global de cuentaGlobal es " + cuentaGlobal);
                }, "nombre")

            });


            var marcapagina = Marcapagina.create({ nombre: "Codehero", url: "http://codehero.co"});

        </script>
    </head>
<body>
    <script type="text/x-handlebars" data-template-name="index">
        <h1>Bienvenido a Ember.js!</h1>
    </script>
    <script type="text/x-handlebars" data-template-name="nosotros">
        <h1>La pagina de nosotros!</h1>
    </script>
    <script type="text/x-handlebars" data-template-name="contacto">
        <h1>La pagina de contacto!</h1>
    </script>
</body>
</html>

Probemos las rutas en el explorador

Naveguemos hasta el archivo index.html en el explorador de tu preferencia. Si queremos probar la ruta de “nosotros” solo basta con navegar hasta index.html#/nosotros y debería aparecerte el template o la plantilla de nosotros:

nosotros-ruta-router-ember-js

Ahora si navegamos hacia index.html#/contacto debería aparecerte lo siguiente:

contacto-ruta-router-ember-js


¿Cómo crear rutas anidadas en Ember.js?

Para crear rutas anidadas debemos hacer los siguiente:

Cambiemos las rutas que definimos anteriormente con los siguiente:

App.Router.map(function() {
                this.resource("nosotros", function() {
                    this.route("equipo");
                });
                this.route("contacto");
            });

Observemos lo siguiente:

  • Para definir rutas anidadas dentro de Ember.js usamos this.resource.
  • Para definir rutas sencillas dentro de Ember.js usamos this.route.
  • En este caso estamos definiendo una ruta anidada hacia “nosotros” y dentro de esta definimos una ruta sencilla hacia "equipo”.

Lo siguiente que tenemos que hacer es crear el template para la ruta ”equipo”:

<script type="text/x-handlebars" data-template-name="nosotros/equipo">
  <h2>
    Unete al equipo!
  </h2>
</script>

Para que el template o plantilla se muestre en el explorador debemos crear un outlet dentro del template de ”nosotros” (no te preocupes si no entiendes que es un outlet, lo vamos a estar cubriendo en los próximos capítulos de la serie, por los momentos imagina que es un contenedor para el contenido de rutas anidadas). Para esto debemos modificar el template de de ”nosotros” veamos como:

<script type="text/x-handlebars" data-template-name="nosotros">
  <h1>
    La pagina de nosotros!
  </h1>
  {{outlet}}
</script>

El archivo index.html debería lucir así:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Aprendamos Ember.js en Codehero!</title>
        <script src="jquery.min.js"></script>
        <script src="handlebars.js"></script>
        <script src="ember.js"></script>
        <script>
            window.App = Ember.Application.create();

            App.Router.map(function() {
                this.resource("nosotros", function() {
                    this.route("equipo");
                });
                this.route("contacto");
            });

            var cuentaGlobal = 0;

            var Marcapagina = Ember.Object.extend({

                convertir_en_link: function() {
                    return "<a href='" + this.get("url") + "'>"
                            + this.get("nombre")
                            + "</a>";
                }
                ,link: function() {
                    return this.convertir_en_link();
                }.property("nombre", "url")

                ,detalle: function() {
                    return 'Link: ' + this.get('link') + '; Nombre: ' + this.get('nombre') + '; Url: ' + this.get('url');
                }.property('link', 'nombre', 'url')

                ,modificarCuenta: Ember.observer(function() {
                    cuentaGlobal += 1;
                    console.log("El valor global de cuentaGlobal es " + cuentaGlobal);
                }, "nombre")

            });


            var marcapagina = Marcapagina.create({ nombre: "Codehero", url: "http://codehero.co"});

        </script>
    </head>
<body>
    <script type="text/x-handlebars" data-template-name="index">
        <h1>Bienvenido a Ember.js!</h1>
    </script>
    <script type="text/x-handlebars" data-template-name="nosotros">
        <h1>La pagina de nosotros!</h1>
        {{outlet}}
    </script>
    <script type="text/x-handlebars" data-template-name="contacto">
        <h1>La pagina de contacto!</h1>
    </script>
    <script type="text/x-handlebars" data-template-name="nosotros/equipo">
        <h2>Unete al equipo!</h2>
    </script>
</body>
</html>

Probemos las rutas anidadas en el explorador

Naveguemos hasta el archivo index.html en el explorador de tu preferencia. Si queremos probar la ruta anidada de “equipo” solo basta con navegar hasta index.html#/nosotros/equipo y debería aparecerte lo siguiente:

equipo-ruta-anidada-router-ember-js


Conclusión

En esta lección, vimos todo lo relacionado con las rutas y router dentro de Ember.js. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso.

¡Te espero la próxima semana!


¿Te ha gustado esta publicación?

Compártela:

Por Carlos Picca

Conoce más sobre este autor aquí


comments powered by Disqus