Skip to content

iRec revision backbutton

Christian Gastrell edited this page Jul 7, 2015 · 4 revisions

Encontrar el boton

En la pagina de revision tenemos un boton para volver:

<div data-role="header">
  <a href="#home" data-role="back" class="ui-nodisc-icon ui-alt-icon ui-btn ui-shadow ui-corner-all ui-icon-arrow-l ui-btn-icon-notext ui-btn-inline"></a>
  <h1>Revision</h1>
</div>

El boton es el primer <a> que aparece en el <div data-role="header">. No tiene nada que lo identifique, asi que vamos a tener que usar algun tipo de selector que nos devuelva univocamente ese boton. Bien podriamos agregarle un id para poder ubicarlo, pero vamos a aprovechar para ver una manera de seleccionar el elemento con jQuery sin tener que agregarle un id.

Ahora bien, como con todas las inicializaciones de los botones, vamos a asignarle la funcionalidad en el handler del evento pagecreate de la pagina #revision. En este momento debemos tener algo parecido a esto:

$('#revision').on('pagecreate', function(evt){
  console.log('pagecreate on revision');

  //inicializacion de botones
  $('#play').click(function(e) {
    e.preventDefault();
    revisionApi.play();
  });

  $('#pausa').click(function(e){
    e.preventDefault();
    revisionApi.pausa();
  });

  //inicializacion de indicadores de tiempo
  revisionApi.currentTime = $('#currentTime').text("00:00");
});

Tenemos la inicializacion de los botones de play y pausa y la configuracion inicial del reloj. Asi que, dentro de este handler vamos a agregar la inicializacion del boton de volver. Para seleccionarlo correctamente vamos a usar un selector por atributos.

A esta altura sabemos que podemos usar jQuery para seleccionar un elemento:

  • por clase: $('.nombre_de_clase') nos devolvera todos los elementos que tengan esa clase
  • por id: $('#id_del_elemento') nos devuelve el primer elemento con el id provisto (no deberia haber mas de uno con el mismo id)

Pero en la documentacion de selectores de jQuery vemos tambien que podemos seleccionar un elemento por sus atributos. Como? Veamos nuestro boton para volver en HTML:

<a href="#home" data-role="back" class="ui-nodisc-icon ui-alt-icon ui-btn ui-shadow ui-corner-all ui-icon-arrow-l ui-btn-icon-notext ui-btn-inline"></a>

El elemento tiene varios atributos:

  • class: define las clases CSS que tiene asociadas
  • href: a donde apunta el vinculo (en este caso es un <a>)
  • data-role: un atributo que usa jQueryMobile para identificar y asignar funcionalidad a los botones

Para seleccionar el elemento a traves de sus atributos la nomenclatura es la siguiente:

//atentos a la apertura y cierre de comillas simples y dobles
$('a[atributo="valor_del_atributo"]');

En nuestro caso vamos a usar el atributo href, entonces nuestro selector se vera asi:

$('a[href="#home"]');

Para que puedan probarlo, vamos a comentar en el archivo js/index.js todas las inicializaciones. Esto es, encuentren donde empiezan las inicializaciones (las llamadas del tipo $('#guia-list')...) y comentenlas anteponiendo un /* y cerrando el comentario cuando terminan estas llamadas con un */. De esta forma van a poder correr la aplicacion en el browser sin que tire errores y podemos ver como seleccionar estos elementos.

Ahora abran index.html en el browser, deberian tener la funcionalidad basica de navegacion con los contenidos de ejemplo. Abran la consola y escriban el selector que pusimos arriba, deberia devolverles un array de 4 elementos que corresponden al selector. Por que 4? Porque tenemos un boton con ese href en 4 de nuestras paginas.

Pero solo queremos que nos devuelva el boton que corresponde a la pagina #revision, entonces podemos usar el segundo parametro de seleccion en jQuery: context. En resumidas palabras, el context es una manera de acotar donde vamos a buscar el elemento, en nuestro caso sera la pagina #revision:

$('a[href="#home"]', '#revision');

Vuelvan a probar este selector ahora y deberia devolverles solo uno de los elementos <a>.

Inicializacion y funcionalidad

Ahora que tenemos el boton que queriamos entonces podemos intervenirlo para que funcione como queremos:

  • que no vaya directamente a la pagina #home
  • que verifique el estado de la revision y si esta isPlaying, que detenga la reproduccion
  • que resetee el estado de la revision
  • finalmente que nos lleve a la pagina #home

Entonces, dentro del handler de pagecreate agregamos primero nuestro selector y usamos on() para capturar el evento click:

$('a[href="#home"]', '#revision').on('click', function(evt) {
  // nuestro codigo aca
});

Dentro vamos a cancelar el funcionamiento normal del evento y agregar la llamada a revisionApi para que detenga el funcionamiento y haga un reset:

$('a[href="#home"]', '#revision').on('click', function(evt) {
  evt.preventDefault(); // cancelar evento

  if(revisionApi.isPlaying) {
    revisionApi.pausa(); // <-- luego cambiaremos por stop
    revisionApi.reset();
  }

  //ir a #home
  $.mobile.navigate('#home');
});

Probar en el browser y luego, descomentando el codigo de inicializacion, en el dispositivo.

Vamos a repetir un procedimiento similar en #interview

  1. Repaso y conceptos basicos
  2. Ejercicios para repasar
  3. Problematica de desarrollo mobile
  4. Phonegap
  5. Requerimientos e instalacion
  6. Phonegap CLI
  7. [Primeros ejercicios con Phonegap](Ejercicio Phonegap)
  8. Plugins
  9. Hello world
  10. Estructura de un proyecto Phonegap
  11. Plugin Device
  12. Debugging
  13. Incorporando un framework CSS
  14. Plugin Vibration
  15. Sumando partes
  16. Plugin Battery Status
  17. Un poco de jQuery
  18. jQuery Mobile
  19. Navegacion
  20. Plugin Dashboard
  21. Revision de Plugin Dashboard
  22. Paginas extra
  23. ToDo
  24. Persistencia
  25. ToDo Persistente
  26. Plugin Camera
  27. Opciones de camara
  28. App Mi Galeria
  29. Revision de Galeria
  30. Plugin File
  31. Escribir y leer texto
  32. Escribir archivos binarios
  33. Guardando fotos
  34. Debugger: weinre
  35. Inspeccionar con weinre
  36. Phonegap Developer App
  37. Refactor de apps
  38. Plugin Media
  39. Pruebas con audio
  40. Control y monitoreo de audio
  41. Encapsular play/pausa
  42. Hacks
  43. Formato de tiempos
  44. Grabar y reproducir
  45. Proyecto Integrador
  46. Revision de interfaz
  47. Interfaz basica
  48. Entrevista: modelo
  49. Funcionalidad: revision
  50. Seleccion de framework
  51. iRec: navegacion
  52. iRec: fileApi
  53. iRec: guias
  54. iRec: entrevistas
  55. iRec: recordApi
  56. iRec: helpers
  57. iRec: mediaApi
  58. iRec: inicializar paginas
  59. iRec: refactor
  60. iRec: mediaApi refactor
  61. iRec: recordApi refactor
  62. iRec: helpers
  63. iRec: guias.js
  64. iRec: entrevistas.js
  65. iRec: crear guias
  66. iRec: re-inicializando
  67. iRec: re-ordenando
  68. iRec: pendientes
  69. iRec: reporte ux
  70. iRec:revision: volver
  71. iRec:entrevista: volver
  72. iRec:revision: cambios
  73. iRec:revision: stop
  74. iRec:revision: Rew 10"
  75. iRec:revision: tag Go
  76. iRec: limpieza
  77. Firma de apps
  78. Android
  79. Generacion de key
  80. Firma de apk
  81. Alineacion de zip
  82. Firmar con Phonegap
  83. iOS
  84. Detalles finales
  85. Config.xml
  86. Iconos
  87. Splash
Clone this wiki locally