Mejora tu HTML: una introducción divertida a Alpine.js | Stephan Haewß | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Mejora tu HTML: una introducción divertida a Alpine.js

teacher avatar Stephan Haewß

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción y descripción general

      2:12

    • 2.

      ¿Por qué y cómo?

      3:10

    • 3.

      Primer proyecto

      3:52

    • 4.

      Integra Alpine JS

      6:05

    • 5.

      Cuenta con un botón

      7:25

    • 6.

      Quiztime

      3:17

    • 7.

      Refactorización

      4:39

    • 8.

      Cómo procesar respuestas

      4:41

    • 9.

      Más sobre bucles

      8:18

    • 10.

      Deja que el usuario introduzca la respuesta correcta

      4:12

    • 11.

      Verificación de la respuesta

      3:58

    • 12.

      Resultado correcto o incorrecto en HTML

      4:14

    • 13.

      Siguiente botón y muestra x

      4:32

    • 14.

      Abre el cuadro de diálogo final

      7:45

    • 15.

      Cuenta puntos

      5:01

    • 16.

      Mejora de la evaluación

      4:04

    • 17.

      Reiniciar el juego

      5:40

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

4

Estudiantes

--

Proyectos

Acerca de esta clase

Aprende los fundamentos más importantes de Alpine.js a través de un minijuego.

¿Estás listo para llevar tu desarrollo web al siguiente nivel? En este curso, aprenderás todo lo que necesitas saber sobre Alpine.js para crear interfaces de usuario dinámicas y atractivas. Tanto si recién comienzas como si tienes algo de experiencia, este curso es perfecto para ti. Te guiaré paso a paso por los fundamentos de Alpine.js y te mostraré cómo agregar elementos interactivos a tus páginas web con solo unas pocas líneas de código. Aprenderás a vincular datos, manejar eventos, crear componentes y mucho más. Contenido del curso:

  • Introducción a Alpine.js: ¿qué es Alpine.js y por qué deberías usarlo?

  • Instalación y configuración: cómo configurar Alpine.js en tu proyecto.

  • Conceptos básicos: x-data, x-text, x-on, x-for y otras directivas importantes.

  • Vinculación de datos: cómo sincronizar datos entre tu HTML y JavaScript.

  • Eventos: cómo reaccionar a las interacciones del usuario.

  • Ejemplos prácticos: vamos a construir juntos un pequeño juego de preguntas para que puedas ampliarlo.

¿A quiénes está dirigida esta clase?

  • Principiantes: ¿Eres nuevo en el desarrollo web y quieres crear tus primeros proyectos interactivos?

  • Avanzado: ¿quieres mejorar tus proyectos web existentes con elementos dinámicos?

  • Cualquier persona que quiera lograr resultados de forma rápida y eficaz: Alpine.js es la opción ideal para usted.

Conoce a tu profesor(a)

Teacher Profile Image

Stephan Haewß

Profesor(a)

Habilidades relacionadas

Desarrollo Desarrollo web
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción y descripción general: Hola, y bienvenidos a mi curso. Vamos a sumergirnos directamente con una visión general del curso y por qué incluso deberías molestarte con alpine dot js. ¿Por qué pin dot js? Esa es una pregunta rápida de responder. ¿Por qué usamos scripts en páginas web para dar vida a las páginas web estáticas Sin scripts, una página web generalmente no es muy interactiva, no es muy dinámica y no es muy fácil de usar. Entonces el objetivo es crear elementos interactivos, tener un estado dinámico, tener enlace de datos para que los cambios en los datos sean inmediatamente visibles en el HTML, mejorar la experiencia del usuario y simplemente poder programar en HTML, en este caso, con la ayuda de alpine Jaz porque en realidad es posible usar Alpine Jaz exclusivamente en Aunque no vamos a hacer eso aquí del todo en este curso, es posible y para hacer dinámicas pequeñas cosas en la página web, es una excelente manera de dar vida rápida y fácilmente a las páginas web. ¿Qué es la Gs alpina? Alpine Gs es un framework JavaScript ligero. Como dije, el código mínimo es el lema aquí, lo que significa que puedes lograr mucho con muy poco código y puedes extender la funcionalidad HML directamente en el código HML usando atributos alpinos Js y luego última instancia también mini scripts que luego puedes escribir directamente en ¿Qué puedes esperar de este curso? En este curso se cubrirán los conceptos básicos de alpine dot js. Dado que este es un curso corto, no se tratarán temas más avanzados, pero aprenderás a definir componentes en Alpine js habilitando el enlace de datos o la sincronización de estados de JavaScript a HTML. Entonces por supuesto, la dinámica de mostrar y ocultar elementos y, naturalmente, también el procesamiento de las entradas de los usuarios, lo cual es, por supuesto, esencial para asegurar una interactividad adecuada Eso es más o menos para qué esperar aquí. Como dije, un curso breve y conciso, pero aquí aprendes los conceptos básicos de Alpine JS y cómo puedes empezar a hacer que tus páginas web sean más interactivas, más dinámicas, y todo eso con relativamente poco esfuerzo. 2. ¿Por qué y cómo?: En este video, vamos a echar un vistazo más de cerca a Alpine JS, y lo haremos directamente en el sitio web de alpine dot js. Lo puedes encontrar en esta dirección alpinejs punto Dev. Aquí puedes ver el logo y una breve descripción, tu ligero framework de JavaScript y el botón G Started. Pero echemos un vistazo más de cerca a esto aquí. ¿De qué se trata Alpine GS? Bueno, para decirlo simplemente, es un nuevo framework ligero, JavaScript framework, pero lo especial de ello queda claro en esta breve sección HTML. Se incluye el guión. Es sólo un archivo JavaScript que puedes obtener de esta dirección o de otros lugares también. También puedes descargarla desde aquí y ponerla en tu propio servidor. Pero lo importante es que una vez que lo hayas hecho y lo hayas incluido aquí, puedes usar atributos como este aquí en HTML. Eso es genial porque esencialmente puedes operar solo dentro de HTML. No haremos esto exclusivamente en este curso porque hay razones prácticas por las que quizás no quieras escribir todo en estos atributos o al menos porque menudo es más agradable externalizar esto a un archivo de script real Son diversos los argumentos a favor de esto, incluyendo que es más fácil formatear y editar. La finalización automática también está disponible en los archivos de script correspondientes y no necesariamente aquí en el HTML. También puedes escribir todo en mecanografiado, transpilot e incluirlo aquí a través etiqueta Script sin dejar de usar Eso también lo veremos. Lo importante aquí son estos atributos. Esta es una taquigrafía para los manejadores de eventos, por ejemplo, y simplemente puede escribirlos como atributos en cualquier elemento en HML Entonces puedes escribir código JavaScript dentro de esos atributos. También puede hacerlo con el atributo onclick. Por ejemplo, existe en HTML normal. Se pueden escribir expresiones JavaScript o código también allí. Pero lo especial aquí es que puedes almacenar un estado o datos aquí a los que luego puedes acceder y puedes implementar fácilmente datos de dos vías vinculando esto. Mira cómo funciona eso en los próximos videos, pero aquí ya puedes ver cómo programar con alpine dot js. Tienes que establecer estos atributos. Ya te puedo decir que este dato X es lo que es crucial para marcar un componente o elemento como componente alpino de Jaz En el interior, puede especificar un objeto. Este objeto está entonces disponible como un estado dentro de este componente. Esto hace que todo sea un componente de Jazz alpino. No es tan versátil como Rx o view JS, pero para una interactividad y dinámica limitadas, puedes integrar Alpine JS muy fácilmente e incluso puedes implementar cosas más complejas con él Si te interesa la documentación o cómo empezar, puedes leerla en esta página web, pero de todas formas la revisaremos en nuestro proyecto. Estamos construyendo una pequeña aplicación de cuestionario que un usuario puede completar. Habrá una pequeña evaluación al final, y es básicamente una aplicación interactiva donde se evalúa la entrada del usuario y las cosas suceden en consecuencia, que luego se renderizan en el HTML. Empezamos eso en el siguiente video. 3. Primer proyecto: Va a comenzar creando un nuevo proyecto usando NPM crear TI. Ahora deberías ir a una terminal. Estoy en la terminal dentro un código de Visual Studio en el directorio padre, donde queremos crear nuestro proyecto. se creará un subdirectorio Aquí se creará un subdirectorio y el nuevo proyecto residirá dentro de ese Como requisito previo, naturalmente no necesitarás Jazz, claro, que ya he mencionado antes, y necesitas instalarlo de antemano, por supuesto. Anna, tengo código de estudio visual aquí y puedes usar ese o cualquier otro IDE que prefieras. Eso depende completamente de ti. Voy a estar usando código de estudio visual aquí en este curso, y voy a demostrar todo usando este IDE. Empecemos. Estoy en la terminal, como dije, en la parentactry, y ahora escribimos en NPM Si no tienes instalado Jazz, esto ya debería funcionar. Es posible que te pregunten si quieres instalar un determinado paquete. Ya lo hice, así que no es necesario para mí. Por lo tanto, me pedirán directamente el nombre del proyecto. Si te piden instalar un paquete, solo di que sí y también llegarás a este punto. Nombra este primer proyecto alpino quiz, y ese será nuestro primer proyecto, un pequeño juego de preguntas usando Alpine JS. Ahora podemos elegir qué framework queremos usar. Alpine no aparece aquí, así que simplemente elegiremos vanilla, lo que significa simplemente JavaScript sin marco, y luego agregaremos alpine más adelante. Tampoco queremos usar mecanografiado aquí, así que solo elige JavaScript Voy a usar solo JavaScript a lo largo de este curso. Bien, eso es. El asistente está completo y ahora solo tenemos que hacer lo que se enumera aquí. CD alpine quiz para navegar en el directorio, y luego simplemente podemos ejecutar NPM install. Esto instalará todos los módulos de nodo que necesitemos. No hay muchos, ya que no estamos usando un framework, principalmente instala T y el servidor VT def. Ahora ya terminamos. Echemos rápidamente un vistazo a lo que se creó, cuestionario alpino aquí, la carpeta. Aquí tenemos todos los módulos de nodo, y si miras dentro del paquete Jason, podemos ver que no hay mucho en él. Como dije, las dependencias def solo contienen VT aquí. No tenemos ninguna dependencia en absoluto, es decir, en tiempo de ejecución, actualmente somos completamente independientes Luego agregaremos alpino, pero por ahora solo tenemos a VT como dependencia del DF aquí. Eso no es tan importante para ti en estos momentos. Es solo para desarrollo y así tenemos un servidor para propósitos de prueba. Hablando de pruebas, ya puedes ingresar el último comando listado aquí NPM o Ejecutar la Def y que iniciaría nuestro servidor o servidor def Será accesible en esta dirección y voy a cambiar al navegador. También puede hacer clic en Comando o Control aquí. Comando haga clic en Mac y en Windows, es Control clic. Aquí tenemos la página de demostración con un botón que cuenta al momento de hacer clic en ella. No necesitamos esta funcionalidad, así que aquí borraremos todo. Echemos un vistazo al índice HTML. Aquí, este primer script main dot js se carga como módulo Type. Eso también es importante. Aquí hay un módulo ES six. Podemos eliminar eso por ahora porque para nuestro primer proyecto, no necesitamos módulo hace que sea más fácil definir funciones globales que se pueden llamar que en HTML. Vamos a quitar el módulo tipo por ahora. Después entramos en el punto principal JS, eliminamos todo aquí. Ya no lo necesitamos y contrarrestar JS, también podemos eliminar aquí. Implementaremos todo en Alpine Js. Bueno. Ahora hemos limpiado aquí y ese es nuestro punto de partida y en el siguiente video, incluiremos alpine Js usando una etiqueta Script. 4. Integra Alpine JS: Como se prometió, ahora vamos a integrar el jazz alpino. Por primera vez, lograremos esto usando una etiqueta script, que me gustaría colocar aquí en la parte superior dentro de la cabeza. Justo entre estas etiquetas de cabeza, la pego. Ahora también necesitamos la fuente para alpino donde podamos obtenerla. En realidad es bastante simple. Simplemente nos referimos al sitio web de Alpine Js y aquí descubriremos cómo lograrlo. Por ejemplo, sólo puedo copiar la primera línea aquí directamente y luego pegarla aquí en nuestro HTML. Aquí lo tenemos, así que tenemos todo lo que necesitamos, y por supuesto, puedes usar HDS aquí o puedes dejarlo fuera, pero como es probable que uses TPS, de todas formas, puedes escribirlo explícitamente, de lo contrario, para páginas HTTP, usarías HDP, o lo dejarías Lo importante, sin embargo, es este atributo de diferir que debes incluir aquí Me asegura de que todo el script sea analizado y cargado sin bloquear la representación de la página, lo que significa que puede ejecutarse en segundo plano Básicamente, solo necesitas copiar la etiqueta script del sitio web de Alpine JS y pegarla aquí y eso es todo. Esencialmente estás hecho. Ahora bien, ¿cómo podemos usar Alpine en nuestra app? Esto sucede a través de los atributos X que realmente no cumplen con el estándar HTML porque para los atributos personalizados, normalmente usarías data dash y luego tus atributos personalizados. Como este guión de datos y luego algo que se te ocurra, sin embargo, en todos los navegadores modernos, esto no es un problema y por eso simplemente podemos usar estos atributos X o X menos con p puedo ver que tengo auto completado aquí y hay muchos atributos aquí que podemos usar y los cubriremos durante el curso del s, claro. Lo primero que tenemos que hacer es especificar este elemento como un componente alpino. Para eso, utilizo X datos. Los datos X indican que a partir de aquí, hay un componente alpino y también podemos especificar más específicamente, podemos definir expresiones JavaScript dentro de aquí. Para este ejemplo, lo mantendremos simple y usaremos JSON o con mayor precisión un objeto Javascript. Dentro de aquí, como mencioné, puedes usar expresiones JavaScript. Por ejemplo, un objeto literal. Para comenzar lo más simple posible, vamos a crear un contador aquí. Escribiré conteo y lo pondré en el valor inicial cero. Básicamente recrearemos el proyecto de demostración que hemos visto y este contador incrementará usando Alpine Gs y también se mostrará usando Alpine Esto también necesitamos un botón. Por ejemplo, creamos un botón aquí y agregamos un signo más y agregaremos algo para mostrar el valor como un div que solo mostrará el valor. Hemos indicado que nuestro div con la aplicación ID es un componente alpino, y he incluido algunos datos aquí. Estos datos pueden ser utilizados dentro del componente. Esta será una forma de enlace de datos para que pueda decir, por ejemplo, que este div muestra el valor actual de count. ¿Nosotros hacemos eso? Eso empieza de nuevo con X, claro. Todo en alpino implica atributos y principalmente X atributos. Hay una opción de atajo que no vamos a usar ahora mismo aquí para algunos de los atributos, simplemente usaremos el texto del atributo aquí, entonces X texto y dentro de aquí, usaremos count. Esto puede parecer mágico, pero también voy a explicar cómo funciona. Primero, solo necesitamos saber esto aquí especifico los datos a utilizar la propiedad de los datos que he especificado, defino mi estado aquí en X datos. Puedo decir en el atributo de texto X que queremos mostrar esto en el texto del DIF. En otras palabras, el texto interno del DIF se establecerá en cualquier valor que esté en conteo y que se refiera a lo que hay en el atributo X data. Ahora no solo pude agregar un objeto literal aquí, sino que también podría agregar una llamada a función que devolviera el objeto. Por ejemplo, se podría llamar a Get data si esa fuera una función global y luego podría devolver este objeto aquí. También es una opción. También lo usaremos más adelante. Pero por ahora, solo escribimos directamente aquí el objeto Javascript en el atributo. Aquí en X text, también estamos especificando JavaScript. Estamos especificando qué mostrar en el texto interior. Por ejemplo, puedo usar uno más dos y el contenido del texto sería entonces tres. Probemos eso. No estamos usando datos de X aquí. Como puede ver, ahora muestra tres en lugar de cero porque ya no estamos usando el contexto de X datos. Aquí, no pasa nada cuando hago clic en el botón porque no hemos hecho nada por esto. No queremos mostrar un uno más dos aquí. Queremos mostrar el valor del contador. Por lo tanto, podemos cambiar eso para contar de nuevo. De esta manera, el valor en X texto hará referencia al valor en X datos. O escribo el objeto literal o llamo a una función que me devolverá los datos aquí en X data. Ahora vemos que ya no muestra tres, sino cero y eso corresponde al valor inicial de conteo. Si especifico números diferentes como dos , ahora mostrará dos. Estamos tomando nota de que con X datos, especificamos la base de los datos que queremos usar y lo que sea que esté debajo de esto puede usar estos datos. Esencialmente he establecido el contexto para las expresiones aquí. En el caso más simple, en X texto, solo uso la propiedad del objeto de datos y Alpine la muestra en el texto del elemento. Ahora, sólo tenemos que hacer que cuando presionemos el botón, estemos incrementando el contador aquí y eso es lo que hacemos en el siguiente video 5. Cuenta con un botón: Ahora hemos logrado la exhibición de nuestro estado aquí en este DIV. Aquí muestra un dos como si escribiera los dos aquí, pero solo que funciona a través del mecanismo de enlace de datos alpinos. Tengo este enlace de datos aquí que especifica a través este atributo de texto X que el estado debe usarse aquí. El estado se especifica en este atributo de datos X, y luego aquí en conteo se usa para el texto. Yo podría, por supuesto, agregar otra propiedad aquí, por ejemplo, contar dos y ponerla a cero. Entonces puedo configurar el texto para que cuente dos aquí, si lo probamos en el navegador, entonces lo ves aquí. Se muestra el cero, por lo que el valor de la cuenta dos. Si lo vuelvo a cambiar para contar, entonces volverán a ser dos. No necesitamos contar dos aquí, así que lo borro y volveremos a empezar aquí desde cero con conteo. Sólo queremos contar desde cero. Lo que queremos hacer ahora es que cuando el usuario haga clic en el botón, el contador simplemente se incremente en uno Funciona usando de nuevo un atributo X, por supuesto, y esta vez usaremos X menos aquí. Vamos a utilizar el formulario largo aquí. También hay una forma corta, y voy a mostrar eso más adelante, pero primero la forma larga X en, y luego aquí ya está sugiriendo un colon y después del colon, puedo decir, qué evento quiero manejar aquí. En nuestro caso aquí, este es un botón, así que manejo el evento click, claro. Después de eso viene igual, y luego dentro de eso, puedo escribir JavaScript y debería escribir algo que incremente el contador. ¿Cómo lo hacemos? Ya hemos usado el estado aquí con solo escribir conteo y aquí podemos hacer lo mismo. Escribimos conteo y luego accedemos al estado y aquí podemos fijarlo a un nuevo valor. Contar es igual a contar más uno. Esta es, por supuesto, la forma larga. También puedes usar formas más cortas, pero probemos esto primero. Damos click en el botón. Accidentalmente quito el signo más aquí, pero eso está bien por ahora. Intenta hacer clic en el botón de todos modos. Entonces vemos que el contador se incrementa cada vez que hago clic en el botón Cada vez que hago clic en el botón, el contador se incrementa y la visualización aquí también se actualiza Déjame arreglar rápidamente este botón aquí. Ahora deberíamos volver a ver el signo más aquí en el botón. Todavía es un poco pequeño el botón aquí con solo un signo más, podría escribir tal vez algo así como tinta, eso debería aumentar el tamaño del botón. Fuera otra vez y esta vez funciona completamente y el botón es más grande. Tenemos nuestra funcionalidad aquí y como se prometió la forma corta, esto es bastante largo como atributo, así que podemos escribir eso más corto. Ahora escribo esta X al click de otra manera. Esta X en colon, podemos dejar fuera. En cambio, podemos escribir un at, y así es como esto realmente funciona. Aquí está la prueba. Empezamos de nuevo en cero y puedo aumentarlo con este botón. Aquí también podemos, por supuesto, hacerlo más corto porque es script Java así podemos escribirlo así, por ejemplo, más es igual a uno o incluso más corto con count plus plus. Eso también funciona. Esto es como pretender que el conteo es una variable global y esa es la magia de este mecanismo alpino de enlace de datos aquí Internamente, eso funciona en alpino muy probablemente estableciendo un contexto específico aquí. Hay varias posibilidades en JavaScript para hacer esto. No lo he buscado, pero por ejemplo, puedes incrustar todo en una llamada a función y luego contar sería un parámetro que se pasa aquí. Entonces puedes, por ejemplo, usar un objeto proxy. También se puede trabajar con un ancho de palabra clave, que establece el contexto del código en un bloque. Sin embargo funciona en detalle en principio, Alpine toma esta cadena aquí, la evalúa probablemente con nueva función Puedo mostrar brevemente esto aquí en el depurador en las herramientas de Def para que puedas crear un nuevo objeto de función en JavaScript No lo conoces ya con nuevo así que con este nuevo, puedes crear nuevos objetos. Por supuesto, function es el constructor para las funciones y con este constructor, puedes especificar un parámetro, y en este parámetro, puedes proporcionar el código que se debe ejecutar dentro de la función. Por ejemplo, puedo escribir aquí una alerta, así alerta, hola, por ejemplo, firmo esto a la variable, la diversión variable global. Como puedes ver, esta diversión es un objeto de función y también puedes ver el código que está dentro de esta función. Por supuesto, también puedo llamar a esta función que he creado, y luego por supuesto, habrá esta alerta que he escrito ahí dentro. Aquí, esta alerta hola, simplemente está funcionando como una función normal. Similar en alpino, esto se evalúa. Lo que escribimos aquí en este atributo at click se evalúa durante el tiempo de ejecución. Cómo exactamente en detalle Alpine está haciendo esto, no necesitaremos saberlo aquí. Pero lo que necesitamos saber es X menos datos, estamos configurando el contexto y luego podemos acceder a este contexto en los atributos alpinos como lo hacemos, por ejemplo, en objetos con esto, pero no tenemos que escribir esto aquí en el HTML. Esto es hacer alpino para nosotros así que solo podemos escribir, por ejemplo, aquí, contar y referirme a este contexto que se establece en X data con no solo puedo acceder al valor de las variables de contexto, sino que en realidad también puedo cambiarlo aquí y eso es lo que estamos haciendo aquí. Entonces el enlace de datos está tomando el relevo y está refrescando la visualización aquí de esta propiedad count en este div y estableciendo el texto interno de este dif. Ahora en realidad creamos nuestra primera aplicación interactiva con Alpine GS. Es solo un contador simple por ahora, pero ese es básicamente el nuevo hola mundo para frameworks de todos modos. Si ha logrado esto aquí, entonces básicamente tiene enlace de datos en Alpine GS en funcionamiento, y eso es lo que realmente queremos aquí. Básicamente, queremos un estado aquí que se renderice automáticamente y siempre se actualice cuando algo cambia. A diferencia de otros frameworks, aquí no es necesario trabajar con funciones especiales, con la función setters o Getters o cualquier otra cosa Simplemente puedes escribir JavaScript aquí dentro los atributos y ni siquiera tienes que usar esto aquí. En cambio, esto funciona automáticamente dentro del dometre. Aquí en la parte superior en el componente superior, especifico la estructura de datos, el objeto que se debe usar aquí y debajo de eso, entonces simplemente puedo acceder a las propiedades así Primera aplicación, por así decirlo, pero no vamos a continuar con esta aplicación, es decir, no estaremos implementando un segundo contador ni restableceremos para el contador ni nada por el estilo aquí. Pero comenzaremos con otra aplicación con un cuestionario breve y sencillo donde el jugador tiene que responder preguntas y luego cambiar a la siguiente pregunta y responde esto y luego al final, habrá una evaluación. Empezamos eso en el siguiente video. 6. Quiztime: Ahora iniciamos nuestro mini quiz usando Alpine JS. He modificado ligeramente nuestro pequeño contraejemplo, pero sigue siendo fundamentalmente lo mismo Acabo de renombrar algunas variables. Count ahora se llama número de pregunta actual y el código se ha actualizado en consecuencia aquí. De igual manera, este evento click opera de la misma manera que antes, pero ahora hace referencia al número de pregunta actual. La etiqueta del botón también se ha actualizado a la siguiente pregunta. Aparte de estos cambios, todo lo demás sigue igual. Entonces, ¿qué pretendemos hacer aquí? Esencialmente, el objetivo es presentar múltiples preguntas al usuario donde debe seleccionar la respuesta correcta para cada una. Al final, se evaluarán las respuestas. Para lograrlo, necesitamos una forma de rastrear el número de pregunta actual como índice para las preguntas y sus respuestas. Para ello, hemos configurado el número de pregunta actual, que representa la pregunta actual se está respondiendo. Inicialmente, esto apunta a la primera pregunta con el índice de cero. A continuación, necesitamos una matriz para sostener las preguntas. Hay posibles respuestas y la respuesta correcta, por supuesto. Voy a empezar por crear una matriz llamada preguntas aquí. Cada elemento de esta matriz será un objeto. Por ejemplo, la primera pregunta podría ser, qué es tres por tres. Un problema menor surge aquí porque ya estoy usando comillas dobles para las cadenas, así que necesito cambiar a comillas simples dentro del objeto. No obstante, abordaremos este tema más adelante de una manera que lo elimine por completo. Escribamos la primera pregunta. Lo que es tres por tres preguntas sencillas que la mayoría de los alumnos de primaria podrían resolver. Por ahora, saltaré la definición de las posibles respuestas aquí y me enfocaré en mostrar la pregunta actual. Debajo del número de pregunta, creo un div para mostrar el texto de la pregunta usando X texto aquí. Quiero que esto muestre dinámicamente la pregunta basada en el índice de número de pregunta actual. Entonces preguntas y luego número de pregunta actual como índice. Agreguemos otra pregunta para que el cuestionario sea más interesante. Por ejemplo, ¿qué es cuatro por 11? Eso también debería ser manejable. Cuando el usuario haga clic en la siguiente pregunta, el contador se incrementará y la pregunta mostrada debería actualizarse Probemos esta funcionalidad. A primera vista, el contador sigue funcionando, pero el texto mostrado muestra objeto objeto. Esto sucede porque no hemos especificado qué propiedad del objeto queremos mostrar. Para solucionar esto, necesitamos acceder a la propiedad de pregunta aquí. Y entonces esto debería ser arreglado. Después de hacer este ajuste, el cuestionario funciona como se esperaba. la primera pregunta, lo que es muestra la primera pregunta, lo que es tres por tres, haciendo clic en la siguiente pregunta, la actualiza a lo que es cuatro veces 11. Sin embargo, si hacemos clic en la siguiente pregunta, nuevamente, nos encontramos con un error porque no hay una tercera pregunta en el enfoque funciona, pero se vuelve más complicado a medida que agregamos más preguntas y más código. Escribir todo directamente en el HTML se vuelve engorroso, especialmente cuando se trata de comillas Para simplificarlo, cambiaremos a usar JavaScript. Definiremos una función en perros principal para devolver las preguntas como un objeto y refacturar nuestro código en consecuencia 7. Refactorización: En este video, vamos a hacer un poco de refactorización, como ya he mencionado Dentro de aquí, tenemos un objeto bastante grande en este atributo y no es ideal escribir en HTML un objeto tan grande porque siempre hay que tener cuidado de que, por ejemplo, las comillas sean correctas. Es por esto que vamos a reemplazar esto con una llamada a función y esta llamada a función devolverá este objeto. Por eso lo estoy cortando aquí vez en cuando usando una llamada a función tal vez obtener el estado del juego , claro, necesito definir esta función ahora y lo haremos en el punto principal JS, que actualmente está vacío. Entonces solo funcionan y esa será una función global, claro, porque no estamos incluyendo esto como módulo. Déjame mostrarte rápidamente aquí. Esta etiqueta script no tiene módulo type, por lo que es por eso que está integrada como un archivo de script normal. Todo lo que escribo aquí es global. Este es el objeto y ahora podemos simplemente devolverlo de esta función. Game stage y mi formatero ya ha hecho esto un poco más agradable aquí y simplemente estoy devolviendo este objeto Lo que se nota, por ejemplo, mi formata también ha reescrito estas citas en consecuencia, así que no más comillas simples sino comillas dobles Pero claro, también puedes usar comillas simples aquí si ya que estamos aquí en un archivo JavaScript normal, esto no es problema. Puedes usar comillas dobles o comillas simples. También una gran ventaja, puedo usar mi formatero aquí y todo lo que tengo normalmente en JavaScript. Por ejemplo, también podría escribir esto en mecanografiado y luego transcribir este archivo a Javascript Puedo cómodamente aquí en las respuestas y todo este objeto se vuelve aún más extenso, así que es bueno que lo tengamos aquí en un JavaScript normal. La respuesta será la equivocada. Escribiré diez aquí y luego el siguiente será el correcto, que también tenemos que marcar aquí en este objeto. Pero primero, vamos a obtener todas las respuestas aquí. La respuesta correcta es nueve, y luego la tercera respuesta será 33. Ahora para la primera pregunta, tenemos las respuestas y para la segunda, podemos hacer lo mismo y vamos a cambiar las respuestas aquí. En consecuencia, por supuesto, esta vez probablemente será la primera que tenga razón. Simplemente tomamos el primero que es el correcto y luego agregamos dos uno equivocado. 111 es falso, y también 33 es falso. Bien. Entonces ahora hemos ampliado todo un poco para que tengamos las respuestas también, y quiero renderizarlo aquí. Entonces por debajo de eso, van a estar las respuestas, y también quiero hacer algo aquí. Para la pregunta, escribo el número aquí antes de la pregunta. Entonces tenemos el número de pregunta de llamada. Entonces voy a usar dos cadenas aquí. Para hacer el convertir el número en una cadena. Entonces también tengo que aumentar, claro, el número antes de hacer eso. Número de pregunta actual más uno y luego dos cadenas, y luego punto y espacio y luego el texto de la pregunta. Ahora hemos terminado la refactorización en get game state y eso aún debería funcionar Vamos a probarlo, y también aquí tenemos salida del número de pregunta de conteo. Podemos quitar eso. Ya no necesitamos eso porque tenemos el número de pregunta delante de la pregunta. Siguiente pregunta, y tenemos la segunda pregunta. ¿Qué es cuatro por 11? Así que muy bonito, sigue funcionando como antes, y voy a quitar este div. Como dije. Ya no necesitamos eso. Otra vez, ¿qué hice aquí? El número de pregunta actual es inicialmente cero más uno es uno, y luego tenemos el punto y el espacio y luego el texto de la pregunta. Para la refactorización, externalizamos, por así decirlo, toda esta definición de objeto aquí en una función en nuestro punto principal JS En esta función, solo devolvemos este objeto y de esta manera, podemos usar JavaScript normal en un archivo JavaScript normal y podemos obtener los datos aquí llamando a esta función lado los datos X, también podemos usar window dot get game state porque es una función global. Esto también estará en el objeto global, el objeto Window en el navegador. Entonces también tenemos las respuestas aquí ahora. Aún no los hemos usado. Los acabamos de escribir aquí en los objetos. Pero en el siguiente video, sacaremos en HL. 8. Cómo procesar respuestas: Ahora queremos mostrar y renderizar nuestras respuestas aquí. Y para eso, primero necesitamos la opción de mostrar algo en absoluto por debajo de esta pregunta que tenemos aquí. Yo diría que aquí solo mostraremos una respuesta, la primera respuesta para las pruebas. Escribo este Diffie con X texto, y para X texto, escribiré preguntas, número de pregunta actual, y luego respuestas Ese es el nombre de nuestra matriz con las respuestas. Y luego solo tomaría el primero aquí, y luego dentro, tenemos el texto de la respuesta. Ahora podemos copiar esto para la segunda respuesta y por debajo de la tercera. Ahora las tres respuestas deberían aparecer a continuación. He puesto letras delante de cada respuesta para que ingreses AB o C aquí, o tal vez más tarde, probablemente ingreses 109 o 33. Tenemos que ver al respecto. Pero aquí, las tres respuestas ya están listadas y cuando hago clic en la siguiente pregunta, entonces tengo las otras tres respuestas que pertenecen a la segunda pregunta. Bastante agradable, pero yo diría que no es del todo óptimo que tengamos que enumerar los tres aquí. Qué estaría bien si tuviéramos algo así como cuatro para cada uno o mapa o algo así para que seamos independientes del número de respuestas en cada pregunta. Podría ser una pregunta donde hay cuatro respuestas o sólo dos, y entonces tendríamos un problema aquí, y por eso queremos hacerlo de otra manera. ¿Alpine tiene algo así, como un bucle? Sí, lo hace, y se ve así. Simplemente lo voy a copiar porque es un poco demasiado para escribir y se hace a través del elemento template. Template es un elemento HTML que no se renderizará en y lo usamos para implementar nuestro bucle. Todo esto funciona aquí, por supuesto, con un atributo X, entonces X menos cuatro, y dentro de eso, escribimos JavaScript en principio. Entonces tenemos las respuestas en preguntas, número de pregunta de la corte, respuestas de punto y respuestas de punto es la matriz. Así que tenemos aquí responder en y luego la matriz de respuestas y en JavaScript podemos entonces realmente hacer un cuatro bucle correspondiente. Entonces, si usaras Javascript estándar aquí, podríamos escribir cuatro, responder en respuestas, y luego hacer algo así, y ese sería el cuerpo del bucle. Alpine, es así. Solo necesito escribir esto aquí X cuatro, y luego aquí solo necesito respuesta en preguntas y luego respuestas punteadas, así la matriz que pertenece a la pregunta actual. Entonces tendría mi cuerpo de bucle aquí y lo haré escribiendo mi div aquí. Este div aquí, se multiplicará, por así decirlo. Tengo un loop que multiplica este dif para mí así puedo sacarlo varias veces y por supuesto, veces como este bucle se ejecuta ¿Cómo puedo acceder a lo que es, por ejemplo, el texto de respuesta dentro de este? Solo puedo usar la respuesta que haría en un bucle cuatro en el cuerpo del bucle, entonces podría usar la respuesta aquí y luego simplemente escribir el texto de punto de respuesta, y todo es entonces el texto para este div. Por supuesto, este div se generará tantas veces como haya elementos en esta matriz. Lo importante aquí es X cuatro, y esta forma de escribirlo, responde en respuestas para que pueda ser cualquier matriz aquí. Vamos a probarlo y podemos ver que funciona igual que la salida fija de estos tres divs aquí y solo que ahora es a través del bucle ahora podría agregar otra respuesta aquí para que podamos ver que tenemos algún beneficio al usar el loop Aquí simplemente agrego otra respuesta. Digamos D 15, que por supuesto es falso. A es la respuesta correcta. Echemos un vistazo. Esta es la primera pregunta que tiene tres respuestas, la segunda pregunta tiene entonces cuatro respuestas, y esta funciona igual. En el código, no tuvimos que cambiar nada para que todo funcione cambiándolo aquí en el HTML. Lo importante es este elemento de plantilla, hay que usarlo para el X cuatro y este atributo, claro, X cuatro y la forma de escribirlo así. Responde en preguntas. RESPUESTAS. Como dije, cualquier array puede estar aquí, por lo que también puede llamar a una función que devuelva una matriz o lo que sea. Aquí un identificador que debe ser válido, claro, por ejemplo, aquí responde en este caso, y luego funciona y estas inmersiones son luego sacadas tantas veces en la cúpula como tiene esta matriz De lo contrario, no tuvimos que cambiar nada, solo esto se ha sumado aquí y con eso, entonces podemos sacar nuestras respuestas aquí Nuevamente, lo importante es X cuatro y esta forma de escribirlo. 9. Más sobre bucles: En este video, voy a explicar más a fondo los bucles que se construyen sobre el ejemplo anterior. Aclaro algunas condiciones y atributos cruciales aquí. Primero, dos condiciones clave para estos bucles, el atributo X cuatro debe estar en un elemento de plantilla, como dije antes, no en otros. No se puede usar un div y X cuatro juntos, eso no va a funcionar. Este es un requisito. Otro es que solo se permite un elemento raíz dentro del bucle, por lo que no se permiten dos o más elementos directamente dentro del elemento de plantilla. Si quieres hacer algo así, entonces puedes poner un div alrededor de estos otros dos divs Por ejemplo, tal vez quieras especificar otra propiedad de respuesta, por ejemplo, respuesta correcta o correcta. Esto indicaría la respuesta correcta, pero no la voy a usar aquí. Es sólo un ejemplo. Tengo dos propiedades para dar salida aquí, así que necesito un solo elemento raíz dentro. No debo tener dos o más elementos al mismo nivel que no estén permitidos y causarán una ¿qué más deberían considerar? Hay otras dos formas de usar esto. También puede especificar un objeto en lugar de la matriz. Por ejemplo, podrías usar respuestas en el índice cero. Este es un objeto, o podría usar estas preguntas en el número de pregunta del tribunal, que daría salida a las propiedades de este objeto de pregunta. No es así exactamente como funciona, pero hay otra manera de hacerlo. Si ya conoces la desestructuración de JavaScript , entenderás Se trata de desestructurar el objeto devuelto en dos partes Esto devuelve algo que contiene el nombre de la propiedad y el valor de la propiedad. Pregunta, número de pregunta coloreado es, por supuesto, un objeto. Echemos un vistazo a eso. Aquí están nuestras preguntas y este objeto está en la primera entrada, y este es el objeto de la segunda entrada en preguntas. Primero obtenemos este objeto y luego podemos desestructurarlo en sus componentes usando esta sintaxis aquí Lo primero que obtenemos aquí es el valor de esta propiedad. Por ejemplo, question es la primera propiedad y el valor es esta cadena aquí. Lo primero que consigo aquí como respuesta en este caso es esta cadena. La segunda propiedad son las respuestas. Esta es una matriz que contiene objetos. Si utilizo el nombre de la proposición como segunda propiedad, debería ser correcto. Esto significa que obtendría preguntas y respuestas como propiedad. Renombrar respuesta, eso sería, vamos a llamarlo valor. Este es el nombre de propiedad del objeto, y este es el valor. Veamos qué pasa. Tenemos preguntas y respuestas aquí. Estos son los nombres de las propiedades. Vuelve a consultar en punto principal js. Este objeto está en la primera pregunta. Tiene las propiedades pregunta y respuestas. Eso es lo que sacamos aquí, la pregunta de nombres de propiedad y respuestas. Si queremos dar salida a los valores, también podemos hacer esto. En lugar de nombre de prop, I valor de salida. Entonces como salida, tenemos primero esta pregunta el valor de la pregunta y el valor de las respuestas es una matriz. Esta es la salida de la misma, no muy útil. Pero en principio, esto es correcto. Esta es esta matriz y así es como se muestra. Las dos cadenas de esta matriz es lo que viste. Como mencioné, esto no es útil aquí, no en este caso, así que voy a deshacer esto, pero puedes usar esta sintaxis aquí también con arrays para obtener el índice actual del bucle. Iteramos a través de respuestas en este bucle, cada una era un objeto que contenía texto Sacamos esto al div con X texto. Pero si quieres indexar, entonces uno, dos, tres antes de este texto de respuesta, podemos hacer lo mismo que con los objetos El primero aquí es la respuesta todavía. Esto sigue siendo el mismo. Este es el valor de esta entrada de matriz y el segundo es el índice. También podemos usar esto aquí. Por ejemplo, índice más punto, necesito cotizaciones simples aquí, claro. Un espacio y luego responder texto, y en realidad, necesitamos incrementar el índice por uno aquí Veamos cómo se ve esto. Funciona uno, dos, tres. Es un poco incómodo tener la primera, la segunda pregunta. Aquí y después las respuestas también usan primero, segundo, tercero. Esto podría ser confuso. Por lo tanto, vamos a sangrarlo y eliminar la numeración ABC Primero, nuevamente, sobre el índice, así es como se obtiene el índice al iterar Si lo necesitas, puedes usar el paréntesis aquí. La similitud con Javascript termina aquí. Esta sintaxis aquí no existe en JavaScript. Pero en alpino, así es como se obtiene el índice. JavaScript four of loop también proporciona el índice, pero ahí necesitarás corchetes ligeramente diferentes. Así que no te confundas con alpine, usa esta sintaxis aquí. Primero, el elemento array. Segundo el índice. Similar a a para cada bucle, déjame mostrarte. Una simple matriz de números, puedo llamar para cada uno en él. Este es un método de matriz. Necesito proporcionar una devolución de llamada aquí y el primer parámetro es el elemento array actual Vamos a la consola registrar el elemento aquí. Si necesito el índice también, se proporciona como el segundo parámetro de la devolución de llamada. Vamos a sacar primero el índice y luego el elemento, y esto está separado por un espacio. Veamos la salida, así que uno, dos, cuatro, y antes de eso, tengo el índice aquí, 012 Es muy similar a esta sintaxis alpina. Primero, el elemento actual en el bucle y segundo, el índice, y luego sigue el in y la matriz o también, como has visto un objeto. En el caso del objeto, el índice es el nombre de la propiedad y el valor es entonces el primer parámetro aquí. Espero que esto no sea demasiado confuso. Necesitamos el índice aquí también porque queremos esta numeración aquí antes de la respuesta. Quitemos las letras aquí. Vamos a sancionar un poco las respuestas. Esto lo podemos hacer de varias maneras. Estoy estableciendo el estilo aquí, específicamente margen izquierdo, diría yo. Vamos a configurarlo para digamos diez píxeles. Vamos a comprobarlo. Todavía no muy sangrada, así que podemos hacer un poco más aquí Cambiemos eso a 20 y ahora yo diría que está bien como también ajustar un poco el espaciado vertical. Pongamos fondo de margen aquí. A 20 píxeles se ve un poco mejor, pero también el botón debería tener un espaciado. Pongamos margen arriba aquí en el botón y eso se ve bien. Lo que es bueno también es que la numeración aquí es automática, así que no tenemos que poner las letras delante de las respuestas. Somos capaces de hacer esto porque también obtenemos el índice aquí con esta sintaxis de lo único más para listas o matrices que pueden cambiar de orden o tener eliminaciones para evitar efectos secundarios, usar una clave Aquí puedes establecer la clave con este atributo. Tecla de colon. Si sabes reaccionar, también puedes establecer el accesorio clave allí y esto ayuda a Alpine a identificar la entrada. Aquí puedes establecer algo así como una identificación, o en nuestro caso, podemos tomar el índice aquí para la clave. Podemos verificar qué efecto tiene esto en el dom si miramos este div aquí, vemos que solo hay este atributo clave de dos puntos. No se usa como atributo en los divs aquí dentro de este contenedor Solo se usa internamente ayudando a Alpine a identificar y administrar correctamente los artículos, especialmente aquí en estos bucles. uso de claves es crucial, particularmente con listas dinámicas donde el orden puede cambiar o los elementos se eliminan. Si bien el índice funciona, considera usar los ID existentes tal vez de la base de datos, algo así. Si hubiera un ID de punto de respuesta, podrías usar eso aquí, pero no tenemos eso, así que estamos usando el índice. 10. Deja que el usuario introduzca la respuesta correcta: Antes de agregar la entrada, me gustaría refactorial usando un diseño flexible para evitar usar margen superior aquí Pongo display a flex, no estás familiarizado con flexbox simplemente sigue adelante Usamos Flexbox aquí para crear espaciado fácilmente con una propiedad de gap Gap 20 píxeles, la propiedad gap define el espacio entre los elementos hijos directos. Por lo tanto, necesitamos establecer la dirección de flexión a columna, lo contrario sería fila, que es horizontal. Contamos con display flex flex direction columna y un hueco de 20 pixeles. Esto crea un espacio de 20 píxeles entre cada elemento hijo. Para agrupar estos elementos, vamos a envolverlos en un div y aquí tenemos el botón. Eliminemos aquí los márgenes innecesarios y luego verifiquemos si aquí todo funciona como se esperaba, y creo que ya está. A ver si esto funciona. El botón es un poco demasiado ancho aquí. Esto se debe a que aquí estamos usando flex y el valor predeterminado es estirar en la otra dirección. Pero eso es fácil de arreglar. Aquí establecemos el ancho del botón en, digamos, tal vez 60 píxeles aquí. Entonces eso se ve un poco demasiado pequeño, así que 100 píxeles. Sí, está bien. En lugar de la siguiente pregunta, probablemente deberíamos etiquetarlo de otra manera como commit, answer, algo así porque la respuesta será grabada y verificada. Pero primero agreguemos un div para el campo de entrada. Este div también respetará la brecha dentro del diseño flex. Dentro de este div crearemos una etiqueta para el campo de entrada. Es una buena práctica etiquetar siempre los elementos del formulario. Llamemos a esta etiqueta respuesta correcta. Ahora agreguemos el campo de entrada y fijemos su ancho en 120 píxeles. Se ve bien, pero para mejorar el diseño, hagamos también la etiqueta de contenedor flexible con columna de dirección flexible aquí. Flexión de visualización, de modo que la etiqueta y el campo de entrada estén dispuestos en dirección vertical. Creo que está bien. El usuario ya puede ingresar la respuesta correcta y en lugar de la siguiente pregunta, usemos una etiqueta más neutra como, Bien, necesitamos ajustar el manejador de eventos aquí para verificar la respuesta, pero lo haremos más adelante Pero ahora centrémonos en recuperar la entrada del usuario. Jazz alpino, utilizamos el atributo X model para vincular el valor de los campos de entrada a una propiedad de datos. Podemos usar el modelo X con entrada, seleccionar, y también elementos de área de texto. Aquí escribo la propiedad de los datos X, los cuales deben estar vinculados aquí a este valor que se ingresa aquí. Vamos a llamarlo respuesta actual. Ese es un buen nombre. Respuesta actual, y entonces yo diría, vamos a introducirla también en X datos aquí con un valor inicial. Así que establecemos la respuesta actual aquí a una cadena vacía. Entonces podemos ver de inmediato que esto también funciona aquí con este enlace de datos con el modelo X, simplemente voy a hacer otro div aquí y allá simplemente configuraré X texto nuevamente a la respuesta actual. Entro algún texto aquí y podemos ver que el enlace de datos está funcionando. Todo lo que escribo aquí en el campo de entrada se refleja en este div donde configuro X texto esta respuesta actual. Siempre que algo cambia en el campo de entrada, entonces se actualiza la respuesta actual y también se notifica a este div o se notifica a Alpine que hay un cambio y lo refleja en este DIF aquí. Ahora en el manejador de clics del botón, también puedo acceder a esta respuesta actual y la registro aquí Si hago clic en Bien, entonces verás que esto está bloqueado en la consola. Aún así también se incrementa el índice a la matriz de preguntas, así que llegamos a la siguiente pregunta aquí Eso sigue siendo necesario para eliminar eso. Pero por ahora, hemos demostrado que aquí puedo acceder a esta respuesta actual que se ingresó aquí en el campo de entrada y ahora puedo evaluar la respuesta actual y ver si esta es realmente la respuesta correcta o la respuesta incorrecta, y esto va a hacer en el siguiente video. 11. Verificación de la respuesta: Este video, queremos verificar la respuesta. Aquí en este manejador de clics, es donde sucederá este momento solo tenemos el registro de la consola y el aumento del número de pregunta actual Vamos a eliminar esto ahora y en su lugar llamo a un método o una función y esta función se llamará check answer. Puedo escribirlo así o también puedo llamarlo aquí, así que eso es lo mismo. Dónde tenemos que escribir este método o esta función aquí mismo en nuestro objeto de estado de juego. Aquí también tenemos nuestras variables, por así decirlo, respuesta actual, o variables de estado aquí, y las preguntas ahora simplemente agrego esta función aquí, marque respuesta, pero solo hágalo arriba aquí. Entonces podemos elegir la sintaxis consecuencia ya que funciona para literales de objeto, no es necesario usar funciones de función o flecha o algo así Escríbelo así. Simplemente los paréntesis de nombre con parámetros, no tenemos ninguno aquí ahora. ¿Cómo podemos verificar la respuesta aquí? Simplemente escribo si esta respuesta actual de punto, es como accedemos al estado de respuesta actual aquí es igual y por supuesto, tenemos que saber cuál es la respuesta correcta, y voy a tomar primero este punto preguntas y luego el número de pregunta actual, por supuesto, entonces tengo el objeto de pregunta actual. Esta pregunta en este punto de número de pregunta actual y luego corregir el índice de respuesta. Esto es algo que no tenemos por el momento, así que tengo que insertarlo aquí. El índice de respuestas es en este caso, para la primera pregunta, la segunda respuesta es la correcta. Refactorización rápida aquí, esto es un poco demasiado largo, así que tomaré esto y haré una variable de índice Tengo este índice de respuesta correcto, y entonces la respuesta correcta es este punto. Para eso, necesito la matriz de respuestas, así que también guardaré el objeto question aquí en una constante. La pregunta es esta, y luego puedo refactorizar esta Pregunta, corregir el índice de respuestas, y entonces aquí puedo tomar respuestas de punto de pregunta con el índice correcto aquí Esta será la respuesta correcta y no necesito esta segunda variable aquí. Esta es la versión final aquí, y ahora puedo verificar esta respuesta actual es igual a respuesta correcta, y en este caso, acabo de poner una alerta aquí. Correcto. En el caso contrario, puedo usar también una alerta con el término incorrecto. Aquí comprobamos si la respuesta actual que el usuario ingresa es igual a la respuesta correcta la respuesta correcta proviene de este índice de respuestas correctas en la matriz de respuestas. Por supuesto, tenemos que establecer el índice de respuesta correcto para cada pregunta, y la segunda pregunta tiene el índice de respuesta correcta de cero porque la primera respuesta es la correcta. Probemos esto. Tenemos la primera pregunta. Entro nueve y la respuesta es incorrecta. Eso no es correcto. Veamos cuál es el problema aquí. Establecemos un punto de interrupción. Comprobemos si tenemos la pregunta correcta aquí. Sí, creo que es correcto. Sí. Veamos cuál es la respuesta correcta. Esta respuesta actual es nueve, pero aquí tenemos un objeto, respuesta correcta es un objeto. Nos hemos olvidado de poner ahí el texto de punto. Cambiemos eso aquí, respuesta correcta, texto punteado, y ahora debería funcionar, corregir, entonces tenemos la respuesta equivocada también se evalúa correctamente. Pero yo diría que aquí no mostramos esto como alerta, pero tenemos que mostrarlo dentro del HTML. También el jugador necesita ir a la siguiente pregunta una vez comprometida esta respuesta y esto lo implementaremos en el siguiente video. 12. Resultado correcto o incorrecto en HTML: Este video, queremos deshacernos de las alertas. Ahora hemos indicado en este momento que la pregunta fue respondida como alerta aquí, y eso no es muy agradable porque todo está bloqueado entonces. Así que queremos deshacernos de esto aquí y luego sacar todo el asunto correspondientemente en HTML Para ello, agregamos otro div debajo de esto, y en este div, queremos escribir algo, un mensaje, y sabemos cómo hacerlo. Dije X texto a mensaje. Este es un estado que necesitamos definir, por supuesto. No existe por el momento, así que lo agregamos justo aquí e inicialmente esta será una cadena vacía. Al principio no se muestra nada, y cuando hayamos determinado entonces si la respuesta es correcta o incorrecta, simplemente podemos establecer esto a esta cadena aquí. Este mensaje de punto es igual a correcto en este caso. Así que ten cuidado de usar este mensaje de punto aquí, no solo mensaje. Así es como tenemos que hacerlo aquí en JavaScript. Si lo pones en el atributo en HML, no tienes que escribir este punto, sino solo mensaje Para el otro caso, esto es lo mismo con mal que la cuerda, y ya debería funcionar. Vamos a comprobarlo. Entonces respuesta equivocada, correcta. Y ahora se muestra la respuesta correcta y correcta. Entonces esto funciona, pero el problema es que todavía puedo ingresar una respuesta diferente aquí, así que tenemos que desactivar esto y hay un atributo correspondiente en HTML, así podemos escribir entrada deshabilitada aquí. Pongámoslo aquí, deshabilitado. Este atributo asegura que no se pueda escribir nada más en este campo de entrada. Veamos cómo se ve esto. Ya no puedo entrar nada aquí. No puedo poner el foco en este campo. No puedo escribir nada. Por supuesto, no tiene sentido tener eso deshabilitado desde el principio, así que tenemos que controlarlo ahora a través de alpino. Para eso, podemos usar X menos bind y esto vincula un atributo de este elemento a una expresión de enlace de datos para especificar atributo tenemos que poner un dos puntos aquí, esto es también lo que se sugiere aquí y allá después de los dos puntos, tenemos que poner el atributo, en este caso, deshabilitado. Necesitamos, por supuesto, establecer esto una expresión Javascript. En este caso, si esta expresión de Javascript es verdadera, entonces este atributo estará presente en este elemento y si la expresión es falsa, entonces este atributo no estará ahí. ¿Qué tengo que escribir aquí ahora? Yo diría que solo agregamos una propiedad y luego solo podemos decir entrada deshabilitada y establecer esto en nuestro método. El valor inicial debe ser falso. Pongámoslo aquí, entrada deshabilitada, false porque el usuario tiene que ingresar datos aquí al principio, y luego cuando comprobemos la respuesta actual, si es correcta, después de eso, podemos establecer esta inhabilitación de entrada en true y después de eso, el usuario ya no puede ingresar nada en el campo de entrada. Vamos a comprobar esto. Entonces puse la respuesta correcta, y aquí vemos que esto ya está deshabilitado. Entonces esto funciona. También podemos ver que aquí deshabilitado, el atributo está presente en el elemento input y está configurado para deshabilitar a la cadena deshabilitada. Por supuesto, también tenemos este enlace X deshabilitado, que define el enlace de datos. Entonces esta expresión luego se evalúa como true, y luego Alpine Js está agregando este atributo aquí con el valor deshabilitado Eso es lo que queríamos lograr. Queríamos que se desactivara este campo de entrada. Eso quiere decir que aquí puedo usar dos o falso, al menos con deshabilitado para indicar si está ahí o no. Ahora aquí tenemos que cambiar este botón para que sea el siguiente botón que vaya a la siguiente pregunta después de presionar el botón OK, entonces debería haber un botón de siguiente pregunta aquí. Creo que la forma más fácil de hacerlo es agregar un segundo botón y si esta respuesta está comprometida, entonces mostramos el botón nuevo y ocultamos el botón viejo aquí. Esto es lo que hacemos en el siguiente video. 13. Siguiente botón y muestra x: En este video, nos vamos a centrar en mostrar el siguiente botón. Para ello, vamos a duplicar este botón aquí que ya tenemos simplemente copio esto y lo pego aquí de nuevo. Este será el siguiente botón. Por supuesto, no va a comprobar la respuesta aquí, en cambio, podemos pensar en un nuevo método. Este método se llamará a continuación para simplemente pasar a la siguiente pregunta. Podemos dejar el resto como está por ahora. Ahora necesitamos mostrar ya sea un botón o el otro por defecto. Es éste, el botón Bien, y luego se hace clic en O, entonces tenemos que ocultarlo y mostrar lo nuevo para eso, alpine tiene un gran atributo que por supuesto, comienza con X y se llama X menos show X menos como hace exactamente lo que dice. Muestra este elemento o oculta este elemento dependiendo de a qué se evalúe la expresión que dijimos aquí. Si la expresión se evalúa como true, se muestra este elemento y si se evalúa como false, no es igualmente necesario agregar una nueva propiedad a nuestro estado y solo voy a llamarlo show next button Si el botón mostrar siguiente es falso, entonces se muestra o y el siguiente botón, por supuesto, no se muestra. Aquí tenemos que cambiarlo para mostrar el siguiente botón. Muestro si el botón mostrar siguiente es verdadero. Eso significa que si cambiamos esto de false, que será el valor inicial a true, entonces esto desaparecerá y se mostrará el otro botón . Solo necesitamos agregar esta propiedad show next button a nuestros datos a nuestro estado. Simplemente podemos hacer eso aquí. El valor inicial será falso, y luego verificamos la respuesta aquí y tenemos que establecer este botón de exposición canina siguiente en true. Entonces al menos esta pantalla alterna de los botones debería funcionar. Vamos a probar esto. Ingresaré el valor correcto aquí, pulsamos y vemos que efectivamente se muestra el siguiente botón. Pero haz click en esto ahora, obtendremos un error porque la siguiente función aún no está definida. No hay problema. Simplemente podemos agregarlo aquí abajo verificar respuesta. Vamos a crear un siguiente método, que sólo se incrementará Esto lo hicimos antes en la respuesta de cheque, pero lo haremos ahora en el siguiente método. número de pregunta actual debe incrementarse en uno. Podemos hacerlo de esta manera. Este es el más corto o tal vez más es igual uno también es un método válido, o esta es la versión larga aquí, también puede hacerlo así. Lo dejaré así más equivale a uno. Esto incrementará el número de pregunta actual en. Así que vamos a comprobar si esto funciona. Entonces respuesta correcta. Bien. Y luego tenemos el siguiente botón, y si hago clic en el siguiente botón, tendremos la segunda pregunta. Así que eso funciona, muy bonito. Pero tengo que restablecer esto aquí, así que este campo de respuesta correcta necesita estar vacío de nuevo y también debería estar habilitado, no deshabilitado. Entonces aquí, hay que hacer un reset show next button debería ser falso nuevamente, y además esta entrada deshabilitada también debería ser falsa. Por lo tanto, el mensaje debe restablecerse a una cadena vacía. Comprobemos esto a continuación. Entonces no hemos restablecido este valor de campo de entrada, pero aún así podemos ingresar aquí la segunda respuesta, esto debería funcionar. Y ahora, si volvemos a hacer clic en siguiente, esto debería darnos el error nuevamente porque no hay siguiente pregunta en la matriz. Bien, entonces restablecemos esta respuesta actual. Aquí la tenemos, respuesta actual, y luego esta respuesta de carrito de puntos debería ser una cadena vacía. Además, estaba este div que ya no necesitamos. Entonces esto de aquí, no necesitamos eso porque tenemos el otro div que muestra el mensaje, así podemos borrarlo y vamos a verificar nuevamente, corregir la respuesta y también la respuesta correcta y luego esto funciona como se esperaba y también se espera el error aquí. Si se hizo clic en siguiente en la última pregunta, tenemos que ir a la evaluación y no a la siguiente pregunta Además, necesitamos rastrear los puntos que el usuario está obteniendo para obtener la respuesta correcta. Entonces tal vez la primera pregunta sea un poco más fácil que la segunda, por lo que debería haber más puntos para la segunda pregunta. Y luego en la evaluación, vamos a resumir los puntos ahí Y dependiendo de la cantidad de puntos, habrá una calificación de la capacidad del usuario. 14. Abre el cuadro de diálogo final: Este video se enfocará en abrir el diálogo que muestra la evaluación. Hay varias formas de crear tal diálogo. Por supuesto, ahí está el elemento de diálogo HTML, pero no vamos a usar eso aquí porque es un poco más complicado usarlo con el Jaz alpino El motivo es que hay que abrir y cerrar este elemento de diálogo con un método call y es posible con alpine hacer eso, pero es más fácil hacerlo sin eso. Usamos un div aquí o más bien dos divs. Se trata de dos divs anidadas, esta externa es básicamente toda la pantalla Lo llenará y a la vez también es el telón de fondo, por lo que será un color de fondo gris ligeramente transparente. Dentro de aquí hay otro div que contiene el diálogo real. Veremos cómo se ve eso pronto. Por ahora, pondré una etiqueta H one aquí y escribiré resultado por ahora. El div exterior, necesitamos mostrarlo de alguna manera y para eso, ya tenemos X show, que conocemos. Yo diría que simplemente llamamos a este diálogo abierto. Una nueva propiedad que necesitamos agregar a nuestros datos. Entonces aquí, abrir diálogo será, por supuesto, falso inicialmente porque el diálogo no debería estar ahí cuando inicies el juego. Queremos mostrar el diálogo si el usuario hace clic en el botón siguiente y no hay más preguntas. Entonces aquí he insertado una nueva condición. Así que vamos a comprobar si esto es correcto. Este número de pregunta actual mayor o igual a esta pregunta longitud de punto menos uno, el menos uno faltaba aquí antes. Creo que esto debería ser correcto. Con la última pregunta, el número de pregunta actual es uno, y entonces tenemos mayor o igual a preguntas longitud es dos menos uno es uno, entonces esto volverá aquí. Eso es correcto. Podemos hacer este diálogo abierto igual a true y esto debería abrirse entonces o mostrar el diálogo intentemos esto. Aquí estoy dando las respuestas equivocadas. No importa. Ahora tenemos el siguiente y luego se muestra el diálogo. Aquí solo es H uno, no está centrado y no es visible como diálogo, sino el mecanismo detrás de eso, la lógica es correcta. Tenemos que posicionar esto por encima de cada otro elemento aquí, así que tenemos que poner esa posición fija, algo así. También ese índice debería ser un valor muy alto, algo así como un 1,000. Esa será la diferencia externa y también obtiene un fondo transparente porque funciona como telón de fondo. El div interno aquí es el contenido de diálogo real que contiene nuestro texto y la evaluación de resultados. Estilos, aquí hay bastantes y por eso no los voy a escribir aquí, pero los copio aquí. A lo mejor aquí al final del cuerpo, realmente no importa donde lo pongas. Las reglas aquí se encontrarán en todas partes. Tengo la clase o la regla para el diálogo de clase aquí y para el contenido del diálogo de clase. Ahora tenemos que asignarlo aquí, claro, en consecuencia al DIFS El primero será de diálogo de clase y el interno es de diálogo de clase. Diez. Así que vamos a echar otro vistazo a los estilos aquí. Así que la posición fija, como dije, arriba e izquierda a cero ancho y alto al 100%, así llena la pantalla. El fondo es entonces este negro transparente, por lo que parece un poco grisáceo y translúcido Luego, muestre flex y justifique los elementos de alineación de contenido. centro asegura que el niño dentro se muestre centrado, por supuesto. También es importante que los diálogos se muestren centrados en la pantalla Ese índice, como dije, también se fijó algo muy alto 1,000 aquí, eso debería ser suficiente. El contenido del diálogo no es nada especial en sí mismo, así que hemos establecido el radio fronterizo ocho aquí y Max con 2500, así que qué ganancia más grande que eso. De lo contrario, es el 90% del ancho. ¿Por qué 90%? Porque quieres ver un poco del fondo a la izquierda y a la derecha. Vamos a probarlo. Responde mal y ahora tenemos el diálogo y esto se ve bien. Aquí, el contenido es justamente este H uno. Claro que vamos a cambiar eso ahora, pero el resto se ve bastante bien, diría yo. Por supuesto, necesitamos algo para cerrar el diálogo un botón, algo así, pero creo que el resto parece un diálogo. Para cerrar el diálogo, podemos, por ejemplo, establecer un controlador de clic aquí en segundo plano. No hay problema. Ya hemos configurado un manejador de clics antes, y aquí podemos simplemente establecer diálogo abierto a caídas, que luego cerrará el diálogo, por supuesto Yo también pondría un botón aquí. Un manejador de clics, y voy a hacer lo mismo aquí. Como diálogo abierto es igual a falso. Entonces probemos esto. Si hago clic aquí en el botón. Oh, no hay texto dentro del botón, pero de todas formas, pero da click afuera, funciona. Si hago clic en el botón, también se cierra. Entonces eso está funcionando, pero el problema es, si hago clic aquí en los resultados H uno, también se cerrará, y eso es, por supuesto, no lo que queremos. Podemos hacer lo siguiente. También podemos agregar un manejador de click aquí. Aquí al click y tenemos este evento del dólar, que por cierto también existe sin el dólar, que es una variable global. evento T Windowt es el objeto de evento actual, pero también tenemos este evento dólar que viene de Alpine Usa evento dólar aquí porque Alpine lo está proporcionando, evento dólar, puedo hacer varias cosas aquí en evento, por ejemplo, podría hacer prevenir default aquí, pero también puedo hacer detener la propagación. Esto es lo que voy a hacer aquí. Yo llamo al método stop propagation on event on dollar event, y veamos si esto funciona. Así que ahora puedo hacer clic en el botón y se cierra, y puedo dar click en el fondo y se cierra. Pero si hago clic en resultado aquí en el contenido, no se cierra y eso es lo que queríamos. La propagación de parada impide efectivamente que este evento vaya a la Diff automática y luego provoque el cierre del diálogo. Esto es detener el evento de pro si lo escribes así, no tenemos la posibilidad de obtener parámetros aquí. Si usa add event listener, entonces obtendrá este evento con su callback como parámetro Pero aquí usamos este evento del dólar que Alpine nos está proporcionando. También puedes dejar el dólar y usar el evento global, pero estamos programando aquí en Alpine, usamos dólar. Sabio, este es el mismo objeto. También podemos llamar aquí a esta propagación de parada, que efectivamente está deteniendo el evento a otros manejadores de clic aquí que cerrarán el diálogo para que el diálogo no se cierre porque el evento no está llegando a los otros manejadores de eventos Bueno, como dije, esto es Javascript normal, manejo normal de eventos Dom aquí, no hay diferencia con el objeto de evento normal. Entonces el diálogo está cerrando y abriendo estos trabajos, y ahora podemos poner aquí nuestra evaluación. Entonces, qué porcentaje de los puntos máximos, por ejemplo, el usuario o el jugador ha logrado que podamos poner aquí y dependiendo qué porcentaje habrá una calificación, tal vez un genio de las matemáticas o volver a clases, algo así. Para eso, necesitamos contar los puntos, claro, para las respuestas, y esto lo haremos en el siguiente video. 15. Cuenta puntos: Ahora hablemos de contar puntos. Queremos tener una evaluación al final, claro, necesitamos puntos para eso cuando el jugador haya respondido a una pregunta, se les deben obtener los puntos acreditados. También queremos poder asignar diferentes valores de punto a cada pregunta. Entonces primero tenemos que asignar puntos a nuestro objeto de estado de juego. Aquí están las preguntas y para cada pregunta, también hay puntos. Voy a empezar aquí con la primera pregunta, hay, digamos, cinco puntos. La segunda pregunta es un poco más difícil, así que obtenemos diez puntos por responderla correctamente. Ahora tenemos que ir a la ubicación donde se determina si la pregunta ha sido respondida correctamente, y eso está en nuestro método de check answer en este punto aquí. Aquí hemos determinado que la respuesta es correcta y tenemos que aumentar nuestros puntos aquí. Necesitamos una puntuación total, así que creamos otra propiedad aquí llamada puntos totales. Comienza, por supuesto, con cero y luego se incrementa en consecuencia, así que podemos simplemente incrementar este punto total de puntos en qué? Bueno, necesitamos la pregunta, que ya tenemos aquí. Lo conseguimos de ahí arriba. Por lo que se agregarán puntos de pregunta aquí. Entonces necesitamos mostrar el número de puntos totales al final y por supuesto, la evaluación, pero primero el número abre nuestro diálogo aquí en el siguiente y vemos que hemos llegado a la última pregunta. Después hacemos a continuación, abrimos el cuadro de diálogo y ahí se muestra algo en consecuencia. El resultado y aquí en este div, podemos poner un span aquí, puntos totales y luego después de eso, podemos poner otro span ahí y luego X menos texto. Nuestro atributo alpino aquí para vincular el texto a una propiedad en nuestro objeto en nuestro objeto de datos y aquí simplemente podemos tomar puntos totales y para estar seguros también podemos llamar a dos cadenas aquí para que esto sea realmente una cadena, no un número, pero también funcionaría sin ahora veamos si eso funciona. Ingresemos aquí la respuesta correcta para que podamos obtener puntos, corregir a continuación y luego ingresaremos la equivocada y eso está mal. El total de puntos es de cinco. Y aquí podemos ver que el botón aún no tiene el texto correcto, pero la puntuación es correcta. Este caso está bien y ahora podemos responder ambas preguntas correctamente, primero una y la segunda 144, y luego tenemos 15 como los puntos totales. Eso también está funcionando. Así que vamos arreglar rápidamente el botón aquí. Simplemente podemos escribir cerca aquí. Entonces ahora tenemos que dos puntos totales tenemos también, y ahora también podemos hacer una evaluación. Entonces, por ejemplo, podemos agregar un mensaje de evaluación aquí como una propiedad, por ejemplo, y luego mostrarlo en el cuadro de diálogo mediante enlace de datos. Entonces aquí está el mensaje de resultado, e inicialmente esto está vacío, claro, y aquí vamos a hacer nuestra evaluación ¿qué escribimos aquí? Yo diría que el mensaje de resultado es igual a perfecto y solo sacamos eso, por supuesto, si realmente alcanzamos la puntuación completa. I puntos totales equivale a 15 en este caso. Si está por debajo de eso, podríamos escribir algo como volver a clase de matemáticas, tal vez no muy educado, pero creo que está bien y lo vamos a refinar un poco en el siguiente video Por ahora, esta es nuestra evaluación. O es perfecto o tienes que volver a clase de matemáticas. Vamos a probarlo. Nueve y 44 es la puntuación perfecta entonces y tenemos puntos totales pero no mensaje. Tenemos que, por supuesto, hacer los datos vinculantes aquí sobre este BIF aquí Agregamos otro BIF dentro de esto y esto estará ligado a nuestro mensaje de resultado para que podamos ver la evaluación intentemos de nuevo nueve y 44 Ahora esta vez tenemos perfecto como mensaje y ahora lo hacemos mal, dos veces mal, y luego volvemos a clase de matemáticas. Después de los puntos totales, podemos insertar un espacio en blanco en este punto, y ahora lo intentamos de nuevo y el resultado se ve bien. No es muy detallado aquí por el momento, pero ya funciona. Se cuentan los puntos y luego por supuesto, todavía tenemos que asegurarnos de que la evaluación también sea un poco más inteligente en este momento, estamos haciendo esto con 15 puntos fijos, y en realidad tenemos que calcular el total, el total máximo de puntos porque si agregamos otra pregunta aquí, ya no coincide con los 15 y en realidad tenemos que calcular todo primero. Entonces, cuántos puntos hay en total, y entonces tal vez podamos asumir un porcentaje de eso. Entonces si tienes el 100%, entonces este caso es perfecto, y si tienes menos de diez o algo así, entonces vuelve a la clase de matemáticas. Y entonces algo en el medio y esto va a hacer en el siguiente video. 16. Mejora de la evaluación: Bien, vamos a mejorar un poco la evaluación. Primero, queremos deshacernos de este número mágico aquí, 15. No es bonito, sobre todo si agregas más preguntas. Necesitamos el número total de puntos posibles aquí, no los jugadores, los puntos totales, por supuesto, sino el puntaje máximo alcanzable Así que simplemente podemos escribir la partitura perfecta aquí. Tenemos que calcular eso y podemos hacer esto usando reducir en este punto preguntas, vamos a obtener una pregunta, llamémosla Q y luego devolveremos puntos Q punto. Por supuesto, también necesitamos el valor anterior en reducir la coma anterior Q, y luego simplemente tomamos Q puntos punto más anterior, hemos calculado la suma aquí Hay otras formas de hacer esto. Lo he hecho con reducir aquí, así que simplemente obtenemos la suma de todos los puntos. Esa es la puntuación perfecta y luego simplemente podemos decir que puntuación perfecta es igual a puntos totales, y luego realmente sacamos perfectos aquí. Entonces también podemos decir digamos 50% o más, entonces diremos algo así como no está mal. Necesitamos dividir este punto total de puntos por puntaje perfecto, y será mejor extraerlo en una constante. Vamos a calcular eso aquí y esto se llamará porcentaje. Si el porcentaje es igual a uno, entonces es una puntuación perfecta. Si el porcentaje está por debajo, no está por encima de 0.5, entonces no está mal y de lo contrario volver a la clase de matemáticas. Antes de probarlo, aquí veo un error. No podemos hacer eso así. Aquí necesitamos un valor inicial porque de lo contrario anterior sería una pregunta. Eso significa un objeto de pregunta y no podemos agregar eso, por supuesto, aquí usamos el valor inicial de cero. Entonces es Q puntos punto más cero, y a partir de entonces anterior siempre será un número. Ahora debería funcionar. Vamos a probarlo. Respondamos la primera pregunta correctamente, la segunda pregunta correctamente, y debería conseguir un no mal aquí. Exactamente esto es lo que se muestra. Lo haré al revés. El primero es correcto, nueve y el segundo es demasiado duro para mí, lo contesto incorrectamente y vuelvo a clase de matemáticas. Eso es porque tengo menos del 50% de puntos y eso obviamente es una lástima. Probemos también la puntuación perfecta. Aquí lo tenemos también funcionando. La ventaja de hacerlo de esta manera es que simplemente podemos agregar preguntas aquí. Si agrego aquí una tercera pregunta, si apunta, entonces automáticamente tengo aquí la evaluación correcta. Porcentaje también sería significativo y entonces simplemente puedo dejar esta evaluación ya que es no importa cuántas preguntas más de la mitad de los puntos máximos alcanzables, entonces no está mal Contesto todo correctamente, siempre es perfecto y de otra manera, aquí me sale este mensaje. Eso es básicamente todo para nuestro mini juego aquí, claro, podemos hacer algunas mejoras. Por ejemplo, podemos agregar un reinicio aquí porque al final del juego, tenemos el problema de que no podemos reiniciar a menos que recarguemos la página, lo cual no es muy agradable Podemos agregar un botón aquí que aparece cuando se cierra el diálogo o simplemente podemos reiniciar el juego directamente en el diálogo cuando está cerrado. Creo que eso tiene más sentido tal vez. En lugar de cerrar, podemos decir reiniciar y cuando haces clic en él, vuelves a ver esto y lo hacemos en el siguiente video. Entonces yo diría que eso es todo para nuestro primer mini juego aquí. Entonces se han introducido conceptos alpinos no son de ninguna manera todos ellos, y tampoco he entrado en todos los detalles, pero lo haremos en los próximos videos del curso completo. partir de la siguiente sección, cubriremos las diferentes características del alpino individualmente entonces, y entraré en más detalles sobre las muchas cosas que puedes considerar. Pero aquí, ya has visto cómo funciona aproximadamente y cómo puedes renderizar el enlace de datos y el estado de tu app aquí y también cómo procesar entradas, lo que funciona muy bien en nuestra miniga 17. Reiniciar el juego: Entonces, la última característica que queremos agregar a nuestro juego es reiniciarlo y eso simplemente implicará restablecer todas nuestras propiedades a sus Esto significa que puedo crear un método aquí llamado reset y luego simplemente copiar estas propiedades aquí que necesitan ser restablecidas. Por supuesto, siempre tengo que escribir esto delante de ellos y la sintaxis aún no está del todo bien, pero lo haré ahora y básicamente solo un poco de trabajo manual. Voy a adelantar esto un poco. Ahora deberíamos tenerlo y ese es básicamente el reset completo de todas nuestras propiedades, nuestros estados aquí. De lo contrario, todavía tenemos las preguntas, pero eso es esencialmente algo que no cambia. Son solo datos que simplemente tienen que estar ahí al principio y no van a cambiar. Esto de aquí es esencialmente que nuestro estado puede cambiar y el resto son métodos que simplemente dejamos como están. Ahora necesitamos llamar a Reset, claro, podemos hacer eso en HTML básicamente donde cerramos el diálogo en este momento. En realidad, realmente no necesitamos cerrar el diálogo explícitamente aquí, pero es suficiente simplemente llamar a este restablecimiento de puntos. Yo no escribiría cerca, claro, pero nuevo juego y luego probemos esto. No importa lo que entre aquí, resultado, y luego nuevo juego, y no pasa nada. Comprobamos las herramientas sordas a la consola, y aquí hemos cometido el error de llamar a este punto reset y solo debería ser reset. Una vez más, vamos a probarlo a continuación, nuevo juego y esta vez funciona. Ahora tenemos de nuevo la primera pregunta. Eso es correcto. Lo hemos desbloqueado todo aquí y luego simplemente podemos ingresar la respuesta correcta y aquí también, y luego vemos 15 puntos, puntaje perfecto y esto funciona y puedo reiniciar el juego nuevamente. Por supuesto, es un poco aburrido solo estas dos preguntas de aquí. Por supuesto también podríamos proceder a hacer otras preguntas y luego hacer rondas así, esa sería la primera vuelta. Después viene la segunda vuelta con otras preguntas. Si estuvieras muy mal, tendrías que repetir la ronda otra vez tal vez hacerla un poco más comprensiva así, pero aquí no queremos hacerlo. En cambio, acabamos de terminar después de la primera ronda y simplemente puedes intentarlo nuevamente reiniciando También podríamos agregar una puntuación alta aquí que luego se guarda con dos preguntas, claro, es un poco tonto, pero si tuvieras 100 preguntas o algo así en diferentes rondas, entonces tendría sentido. Tener una puntuación alta aquí. Podrías guardar la puntuación más alta en el almacenamiento local, por ejemplo, que seguirá ahí después de recargar la página entonces Vamos a repasarlo otra vez. Lo podemos ver muy bien en el índice HTML. Lo que usamos, usamos X menos texto para hacer el enlace de datos a las propiedades y por supuesto, más importante aquí es cómo definir componentes. Eso significa cómo activar realmente alpine en un componente en un sub árbol y lo hicimos aquí con el atributo X data. Eso es lo más importante. Con eso, se activa alpino, por así decirlo, para este div aquí, en este caso, para este elemento y todos los elementos a continuación. Esta aquí es la activación y ahí puedes usar estos otros atributos como X texto o X cuatro, este bucle que está casi avanzado, yo diría aquí. Por supuesto, entrada con modelo X. Eso también es muy importante para activar el enlace de datos de dos vías para los elementos de entrada como en la entrada aquí y también en el área de selección y texto. Entonces también tenemos X bind, que une cualquier atributo a las propiedades que tenemos almacenadas en el estado y también tenemos X show, que muestra un elemento u oculta un elemento dependiendo si true o false se devuelve en esta expresión Javascript. Por supuesto, importante aquí en todos estos atributos X, entonces puedes acceder al contexto aquí que se estableció con datos X sin tener que escribir un prefijo como este o algo delante de él, pero simplemente puedes pretender que estas son variables locales o globales como lo hacemos aquí con el botón Mostrar siguiente. También miramos a estos manejadores de eventos, lo cual es, por supuesto, muy importante para las interacciones Al hacer clic en el botón, cuando el usuario hace clic en el botón, entonces se ejecuta este código que está aquí. Aquí, simplemente tienes JavaScript, pero puedes, por supuesto, también llamar a métodos y eso lo hicimos aquí. Este es nuestro estado de juego y todo es básicamente normal Javascript. No hay alpino en él, así que es simplemente un objeto que volvemos aquí en esta función. Este objeto, simplemente podemos acceder a las propiedades que definimos aquí con este punto y luego la propiedad y Alpine JS luego usa este objeto aquí para el enlace de datos y para todos estos se conectan aquí. Creo que es muy notable que podamos simplemente devolver un objeto completamente normal aquí en contraste con otros frameworks que también ofrecen algo así como enlace de datos y administrar nuestro estado aquí así. Realmente no hay ingredientes especiales aquí. Es simplemente Javascript muy normal y por supuesto también puedes usar funciones normales de JavaScript como reducir, por ejemplo, y puedes acceder a todas las propiedades de la manera normal con esto. Eso significa que, por supuesto, también podrías usar la clase aquí y crear un objeto con nuevo. Eso es posible. Yo no lo hice aquí, pero también es necesario desde mi punto de vista aquí, por supuesto, puedes hacerlo. Eso depende de ti porque esta parte de aquí realmente es completamente normal Javascript. Hay algunas funciones Alpine GS, pero para la funcionalidad básica, todo funciona con Javascript simple normal.