Skip to content

iRec inicializacion 2

Christian Gastrell edited this page Jun 30, 2015 · 3 revisions

Como dijimos, la inicializacion va a permanecer en el archivo js/index.js.

En una suerte de orden cronologico vamos a ver las inicializaciones de las paginas segun el orden en que podemos acceder a ellas. El arbol de navegacion es algo asi:

  • #home
    • #guia-list
      • #interview
        • #revision
      • #nueva-guia
    • #entrevista-list
      • #revision

#guia-list: pagecreate

En #guia-list necesitamos configurar el boton que nos llevara a la pagina #nueva-guia. Es decir, ya existe y funciona, pero necesitamos intervenir el boton para poder acceder a #nueva-guia con un nombre para la guia.

Usamos una llamada a prompt(). prompt() funciona igual que alert() en el sentido de que detiene la ejecucion hasta que se haya resuelto. Entonces al hacer click en #nueva-guia preguntamos el nombre para la guia que vamos a crear. Si el resultado es nulo/false/vacio volvemos a #home. Sino, asignamos el nombre provisto al elemento #titulo-guia y accedemos a la pagina:

$('#guia-list').on('pagecreate', function(){
  //inicializar el boton para crear nuevas guias
  $('a[href="#nueva-guia"]').on('click', function(evt){
    evt.preventDefault();
    var p = prompt("Nombre de la nueva guia","");
    if(!p || !p.trim()) {
      $(':mobile-pagecontainer').pagecontainer('change','#home');
      return false;
    }
    $('#titulo-guia').text(p);
    $(':mobile-pagecontainer').pagecontainer('change','#nueva-guia');
  });
});

#guia-list: pageshow

Esta funcion ya la teniamos, pero tiene leves cambios para dar mas funcionalidad:

$('#guia-list').on('pageshow', function(e, pages){
  console.log('pageshow en guia-list');
  var container = $('#guias', pages.toPage);
  container.empty();
  $.each(guias.lista, function(i,e){
    var stringData = JSON.stringify(e);
    var li = $('<li />').appendTo(container);
    var a = $('<a />')
      .attr('href','#interview')
      .data('guia',e)
      .text(e.nombre)
      .appendTo(li)
      .on('taphold', function(evt){
        var p = confirm('Eliminar la guia "'+e.nombre+'"?');
      })
      .click(function(evt){
        evt.preventDefault();
        var p = prompt("Nombre la entrevista","");
        if(!p || !p.trim()) {
          return;
        }
        $('#titulo-entrevista').text(p);
        $('#interview').data('guia',e);
        $(':mobile-pagecontainer').pagecontainer('change','#interview');
      });
  });
  container.listview('refresh');
});

#entrevista-list: pageshow

Esta funcion de inicializacion tambien tiene minimos cambios. Principalmente usamos la propiedad entrevista.nombre para el listado, que era algo que debiamos corregir:

$('#entrevista-list').on('pageshow', function(e, pages){
  console.log('pageshow en entrevista-list');
  var container = $('#entrevistas', pages.toPage);
  container.empty();
  $.each(entrevistas.lista, function(i,e){
    var stringData = JSON.stringify(e);
    var li = $('<li />').appendTo(container);
    var a = $('<a />')
      .attr('href','#revision')
      .text(e.nombre)
      .appendTo(li)
      .on('taphold', function(evt){
        var p = confirm('Eliminar la entrevista "'+e.nombre+'"?');
      })
      .click(function(evt){
        evt.preventDefault();
        //esta vez pasamos el indice de la entrevista
        $('#revision').data('entrevistaIdx',i);
        $(':mobile-pagecontainer').pagecontainer('change','#revision');
      });
  });
  container.listview('refresh');
});

No necesitamos (por ahora) hacer ninguna llamada a traves de pagecreate en esta pagina.

#interview: pagecreate

Otra funcion que creo que no ha cambiado.

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

  $('#record').click(function(e){
    e.preventDefault();
    if(recordApi.isRecording) {
      recordApi.stop();
    }else{
      recordApi.record();
    }
  });
});

#interview: pageshow

Utilizamos el evento pageshow para inicializar recordApi llamando a nuevaGrabacion(). Como vamos a llamar una funcion asincronica (nuevaGrabacion(guia.id, callback)) mostramos el spinner con $.mobile.loading('show') y lo ocultamos cuando se completo la llamada a nuevaGrabacion con $.mobile.loading('hide'):

$('#interview').on('pageshow', function(e, pages){
  // console.log(e);
  $.mobile.loading('show');
  console.log('pageshow on interview');
  var guia = pages.toPage.data('guia');
  var container = $('#guia', pages.toPage);
  container.empty();
  recordApi.nuevaGrabacion(guia.id, function(){
    $.each(guia.preguntas, function(i,e){
      var div = $('<div class="respuesta" />');
      div.append(recordApi.createTagButton(i));
      div.append(e.texto);

      container.append(div);
    });
    $.mobile.loading('hide');
  });
});

#revision: pagecreate

A esta inicializacion le falta la inicializacion del boton para retroceder 10 segundos...
Tampoco estamos utilizando el boton stop, decidamos si lo inicializamos o lo sacamos de la interfaz.

$('#revision').on('pagecreate', function(){
  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");
});

#revision: pageshow

Tienen que recordar en este punto que, cuando navegamos a estas paginas (#revision y #interview), ya les asignamos la guia o entrevista (segun el caso) y cuando recibimos el evento pageshow simplemente reconfiguramos toda la pagina basandonos en la guia o entrevista asignada.
Notar que llamamos a $.mobile.loading('hide') porque esperamos que, en otra parte del proceso, se haya mostrado el spinner y aca queremos sacarlo.

$('#revision').on('pageshow', function(e, pages){
  console.log('pageshow en #revision');

  // var entrevista = crearEntrevista();
  var entrevista = entrevistas.lista[pages.toPage.data('entrevistaIdx')];
  var guia = guias.lista.filter(function(g){
    return g.id == entrevista.interview;
  })[0];
  $('#titulo-entrevista').text(entrevista.nombre);
  var container = $('div#respuestas', pages.toPage);
  container.empty();
  revisionApi.load(pages.toPage.data('entrevistaIdx'));
  $.each(guia.preguntas, function(i,e){
    var div = $('<div class="respuesta" />');
    div.append(revisionApi.createTagButton(i));
    div.append(e.texto);

    var tags = entrevista.tags.filter(function(tag){
      return tag.ref == i;
    });

    $.each(tags, function(ii,ee){
      div.append( revisionApi.createSeekButton(ee.time) );
    });

    container.append(div);
  });
  $.mobile.loading('hide');
});

#nueva-guia: pagecreate

$('#nueva-guia').on('pagecreate', function(){
  console.log('pagecreate on nueva-guia');

  $('#guardar-guia').on('click', function(evt){
    evt.preventDefault();
    if(!$('#titulo-guia').text() || $('li.pregunta').length < 1) {
      alert('Hay un error en la guia');
      return;
    }
    $.mobile.loading('show');
    var guia = {
      nombre: $('#titulo-guia').text(),
      id: guid(),
      preguntas: {}
    };
    $('#preguntas li').each(function(i,e){
      console.log( $(e).children().first().text() );
      guia.preguntas[i+1] = {
        texto: $(e).children().first().text()
      };
    });
    guias.agregarGuia(guia, function(){
      $.mobile.loading('hide');
      $(':mobile-pagecontainer').pagecontainer('change','#guia-list');
    });
  });
  $('#agregarPregunta').on('click', function(evt){
    evt.preventDefault();
    if($('#preguntaInput').val()) {
      var li = $('<li />')
        .attr('data-icon','delete')
        .addClass('pregunta');
      var a = $('<a href="#" />')
        .text($('#preguntaInput').val())
        .click(function(evt2){
          evt2.preventDefault();
          $(this).parent().remove();
          $('body').focus(); //<- para que no caiga el focus directo en el input
        })
        .appendTo(li);
      $('#preguntas').append(li);
      $('#preguntas').listview('refresh');
      $('#preguntaInput').val('').focus();
    }
  });
});

#nueva-guia: pageshow

En el evento pageshow solo nos aseguramos de inicializar la pagina en limpio:

$('#nueva-guia').on('pageshow', function(e, pages){
  $('#preguntaInput').val("");
  $('#preguntas').empty();
  $('#preguntas').listview('refresh');
});

Es tiempo de probar! Porque en la proxima tenemos que resolver el problema de reordenar el listado de preguntas

  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