Vuejs para programadores jQuery. CheckBox y RadioButton V

Vuejs para programadores jQuery. 

CheckBox y RadioButton V


En este post trataremos los CheckBox y los RadioButton para saber como se controlan en Vuejs.


JQUERY - CHECKBOX


Enlaces:


Primero los CheckBox y empezamos por el HTML:




la parte relevante está en el Form:


<form>

<div class="custom-control custom-checkbox mb-3">

<input type="checkbox" class="custom-control-input" id="customControlValidation1">

<label class="custom-control-label" for="customControlValidation1">Haga click en el check box</label>

</div>

<div>

<span id="contenido"></span>

</div>

</form>


Tenemos un form input type checkbox y un espacio con un id "contenido" para mostrar el estado actual del checkbox. Un checkbox solo permite dos estados: check y uncheck. Veamos como lo resolvemos en jQuery:


<script>

const checkbox = jQuery('#customControlValidation1')

checkbox.on('click', actualiza )

actualiza()


function actualiza() {

jQuery('#contenido').empty().append(checkbox.prop('checked') ? 'Chequeado' : 'Sin chequear')

}

</script>


Primero el const para la relación de una constante con el objeto HTML del checkbox. Luego asociamos la función al evento click y por último lanzamos la actualización por primera vez antes de los eventos para que muestre el primero resultado.


La función actualiza:


function actualiza() {

jQuery('#contenido').empty().append(checkbox.prop('checked') ? 'Chequeado' : 'Sin chequear')

}


Con jQuery referimos al id "contenido", lo vaciamos con empty() y luego agregamos un nuevo contenido. Revisemos que contenido es:


checkbox.prop('checked') ? 'Chequeado' : 'Sin chequear'


Comprobamos en el objeto asignado a la constante que el estado sea checked. Si es así devuelve el mensaje 'Chequeado' y si no es así devuelve el mensaje: 'Sin chequear'


Nunca mi código es imposición. Solo resuelvo los problemas según mi propia psiquis, si ven soluciones que se adecuen más a su forma de pensar no duden en usarlas.


VUEJS - CHECKBOX


Enlaces:


Veamos como hacemos esto mismo en Vuejs, primero el HTML


<form>

<div class="custom-control custom-checkbox mb-3">

<input type="checkbox" class="custom-control-input" id="customControlValidation1" v-model="chequeado">

<label class="custom-control-label" for="customControlValidation1">Haga click en el check box</label>

</div>

<div>

<span>

{{chequeado ? 'Está chequeado' : 'No se ha chequeado'}}

</span>

</div>

</form>

Vemos en el input otra vez el uso el v-model. Hablemos de ello un momento. v-model es una manera de asignar una variable a los controladores pero no define el tipo de variable, lo define el elemento sobre el que lo estamos usando. Así en los ejemplos anteriores v-model apuntaba a una variable de cadena de caracteres pero en este caso se espera una variable Boolean (o sea de dos estados posible: TRUE o FALSE).


El siguiente cambio es esperado:


{{chequeado ? 'Está chequeado' : 'No se ha chequeado'}}


Se comprueba la variable, si es TRUE muestra 'Está chequeado' y si es FALSE muestra 'No se ha chequeado'


El código JS es básico:


new Vue({

el: '#app',

data: {

chequeado: false

}

})

</script>


Solo se ha creado la variable y asignado un valor inicial que será el estado inicial del checkbox. Una vez más insistimos en que no es necesario estar actualizando el valor ya que al cambiar el v-model la variable se actualizara y también el contenido mostrado.


Index - CheckBox


JQUERY- RADIOBUTTON

Enlaces:


Pasemos ahora a revisar lo que hemos creado de RadioButton:


El HTML:


<form>

<div class="custom-control custom-radio">

<input type="radio" class="custom-control-input" value="primero" id="customControlValidation2" name="radio-stacked" checked>

<label class="custom-control-label" for="customControlValidation2">Esta es la primer opcion</label>

</div>

<div class="custom-control custom-radio mb-3">

<input type="radio" class="custom-control-input" id="customControlValidation3" name="radio-stacked" value="segundo">

<label class="custom-control-label" for="customControlValidation3">Esta es la segunda opcion</label>

</div>

<div>

<span id="contenido"></span>

</div>

</form>

Más o menos estamos manteniendo la lógica. En este caso los RadioButtons pide un mínimo de dos controles. jQuery usa la lógica del HTML para identificar los RadioButtons relacionados aprovechando que usan el mismo atributo name.


<script>

const radioButton = jQuery('input:radio[name=radio-stacked]')

radioButton.on('input', actualiza )

actualiza()

function actualiza() {

jQuery('#contenido').empty().append(jQuery('input:radio[name=radio-stacked]:checked').val())

}

</script>


Realmente el código es muy sencillo. Y solo cambia del caso anterior en el contenido del append:


jQuery('input:radio[name=radio-stacked]:checked').val()


Simplemente recogemos el val() (value) del RadioButtons que tenga check en ese momento. El elegido por defecto está marcado en el HTML con el atributo checked y de los RadioButtons siempre se espera que halla uno chequeado.


Se ha puesto en el value de los elementos HTML el mensaje que mostramos en el elemento con id "contenido"


VUEJS - RADIOBUTTON

Enlaces:


Pasemos a Vuejs observando el HTML:


<form>

<div class="custom-control custom-radio">

<input type="radio" class="custom-control-input" value="primero" id="customControlValidation2" name="radio-stacked" v-model="checkValue">

<label class="custom-control-label" for="customControlValidation2">Esta es la primer opcion</label>

</div>

<div class="custom-control custom-radio mb-3">

<input type="radio" class="custom-control-input" id="customControlValidation3" name="radio-stacked" value="segundo" v-model="checkValue">

<label class="custom-control-label" for="customControlValidation3">Esta es la segunda</label>

</div>

<div>

<span>{{checkValue}}</span>

</div>

</form>

Hemos eliminado el atributo checked porque el elegido lo definirá el valor por defecto de la variable asociada con v-model. Es este caso relacionamos los RadioButtons usando la misma variable para v-model en ambos elemento y repetimos la operación de mostrar el contenido de dicha variable para saber cual ha sido elegida.


Y el JS es igual que en el caso anterior:


<script>

new Vue({

el: '#app',

data: {

checkValue: 'primero'

}

})

</script>


Se le asigna a la variable que se usara el valor (value) del elemento que queremos que se marque por defecto.



Hasta ahora estamos yendo despacio y mirando caso a caso para poder alejar dudas específicas. En el próximo post trabajaremos con botones y crearemos una lógica que nos permita configurar un botón a través de CheckBox y RadioButtons combinados.


La idea es un poco ir de menos a más. Una vez entendamos las bases de funcionamiento de diferentes controladores iremos combinando para poder lograr cosas más complejas.


Esperamos tener feedback como para saber si este material está siendo útil, si hay que cambiar la hoja de ruta, si el ritmo es el adecuado, etc.


Código.


También recordar que esto es un acercamiento para entender la lógica de Vue desde el punto de vista de jQuery pero para aprender realmente como funciona Vuejs, como realizar proyectos completos o aprender más de su ecosistema te recomiendo visitar: escuelavue.es (no, no es mío y no, no es publicidad) gratuito y con muy buen contenido creado por Juan Andrés Núñez.


O los artículos de Desire en: https://desiremcarmona.com/#/guides


Consultas, dudas, comentarios: Slack de PEUM o en Twitter.



Vuejs para programadores jQuery. Form Input Filtro IV


Vuejs para programadores jQuery.


Form Input Filtro


Continuamos con el código jQuery y Vue. Estos artículos parece que están saliendo cortos. La idea es no apabullar con conceptos pero si consideran que deberían ser dos artículos en cada post dejar el comentario. Gracias


Esta vez hemos variado solo un poco el código para lograr un filtro de contenido básico. La idea es que el texto ingresado en el input solo sea válido cuando tienen más de 4 caracteres y menos de 11.



JQUERY

Enlaces:

Codesandbox: https://githubbox.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/jQueryInputFilter.html

GitHub: https://github.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/jQueryInputFilter.html


El único cambio relevante en jQuery ha sido aumentar las reglas de validación del if de la función actualizar:


if (!exampleInput.val()) { //Anterior


if (!exampleInput.val() || exampleInput.val().length < 5 || exampleInput.val().length > 10) { //Nuevo


VUEJS


Enlaces:

Codesandbox: https://githubbox.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/VueJsInputFilter.html

GitHub: https://github.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/VueJsInputFilter.html


Veamos el cambio en VueJs


this.classInput = this.contenido === '' ? 'is-invalid' : 'is-valid' //Anterior


this.classInput = this.contenido === '' || this.contenido.length < 5 || this.contenido.length > 10 ? 'is-invalid' : 'is-valid' //Nuevo


En Vuejs vemos que hemos ampliado el if ternario con condiciones separadas por OR (||) igual que hicimos en jQuery en el if correspondiente. Usar el if ternario no es indispensable. Si hay dudas con respeto a como funciona se recomienda usar el if de forma normal. Trataremos más sobre if, ternarios e if inútiles en otro post.


Debemos recordar siempre que estamos trabajando con JS y que muchas cosas son de JS nativo (como el caso del if, las condiciones, etc.) y por lo tanto un cambio como este es igual en ambos casos.


Por supuesto que los filtros que existen son bastante más complejos que el que hemos hecho aquí. Prometemos ir agregando cosas más útiles a medida que avancemos.


Antes de abandonar temporalmente los Form Input y pasar a CheckBox y Radio Button repasemos algunos conceptos que hemos obviado hasta ahora:


Enlaces index:

Codesandbox: https://githubbox.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/indexInputFilter.html

GitHub: https://github.com/Gonzalo2310/jQuery-Vuejs/blob/master/Input/filtros/indexInputFilter.html


This.


this es un apuntador usado normalmente en los objetos de casi cualquier lenguaje. Apunta a si mismo. El this usado en vue es una característica de los objetos Js para apuntarse a si mismos


¿Por qué se usa el this?


Lo mejor es responder con código. Veamos lo siguiente:


<script>

let name = 'Nombre externo'

new Vue({

el: '#app',

data: {

name: 'Nombre interno'

},

methods: {

mostrar() {

console.log(name) // esto imprimirá el nombre externo

console.log(this.name) //esto imprimirá el nombre interno

}

}

})

</script>


Y como decía antes no es una característica de Vue u otro framework o librería sino que es una característica de Js.


Así que por lo tanto cuando usamos funciones o variables de Vue debemos usar el this. Pero ¿Siempre? En código Js si. Siempre. Veamos que pasa en las variables y funciones que usamos en HTML


Volvemos al primer código y ponemos aquí todo el HTML:


<div class="container" id="app">

<div class="row">

<div class="col-1">

&nbsp;

</div>

<div class="col-8">

<form>

<div class="form-group">

<label for="exampleInputEmail1">Vuejs Input Simple</label>

<input type="text" class="form-control" id="exampleInputEmail1" v-model="contenido" aria-describedby="emailHelp">

<small id="emailHelp" class="form-text text-muted">Lo que ingrese aquí se mostrara debajo</small>

</div>

<div>

<span>{{contenido}}</span>

</div>

</form>

</div>

<div class="col-1">

&nbsp;

</div>

</div>

</div>

Vemos dos cosas de Vuejs en el HTML v-model apuntando a una variable y luego mostramos esa misma variable con los paréntesis {{}} pero no usamos el apuntador this. ¿Por qué?

Porque hemos definido el "el: '#app'" en la instancia de Vue y tenemos el id="app" en el elemento padre de este HTML indicando a VueJs que este contenido está controlado por la instancia, por lo que cualquier variable o método será SI o SI parte del objeto Vue.

Al hacer esto NO podemos usar variables de Js que no son parte del objeto instanciado. Esto plantea un problema para cuando queremos usar variables globales, o funciones externas al objeto dentro del HTML.


En realidad eso tiene una fácil solución y es usar un método interno para devolver el resultado del método externo (Lo mismo para las variables). Ya sé. No lo estoy dejando claro así que pasemos a ejemplos:


<div id="app">

<div>{{nombre}}</div>

<div>{{verificaMensaje()}}

</div>


<script>

function verficaMensaje(mensaje) {

return mensaje ? mensaje : 'No hay mensaje'

}


let nombre='Gonzalo'


new Vue({

el: '#app'

})


</script>


No funcionará porque la variable nombre y el método verficaMensaje no existen dentro del objeto Vue. Puesto así la solución es fácil, se escriben dentro y listo, sin embargo cuando es una función externa compleja (quizás ni siquiera nuestra) traer el código a cada instancia es un problema de muchos indoles. La principal es la portabilidad de ese código.


Así que el procedimiento que deberíamos hacer es algo como lo siguiente:


<div id="app">

<div>{{nombre}}</div>

<div>{{verificaMensaje()}}

</div>


<script>

function verficaMensaje(mensaje) {

return mensaje ? mensaje : 'No hay mensaje'

}


let nombre='Gonzalo'


new Vue({

el: '#app',

data: {

nombre: nombre

},

methods: {

verificaMensaje(mensaje) {

return verificaMensaje(mensaje)

}

}

})


</script>


Esto si funciona (ojo, no es indispensable usar los mismos nombre de variables o métodos pero si usar los nombres de métodos o variables que se usaran en el HTML) y veamos un detalle


nombre: nombre -> no tiene el apuntado this (si fuera una variable del objeto a la que se iguala debería ser: nombre: this->nombrevariable ) porque no apunta a una variable interna sino externa al objeto.


verificaMensaje(mensaje) {

return verificaMensaje(mensaje)

}

Aquí sucede lo mismo con el apuntador this en el return, ya que no se devuelve el resultado de un método interno sino de una función externa.


Espero haberlo dejado un poco más claro. Si no es así dejen comentario y volveremos sobre el tema más adelante.


Sobre el tema del this: Documentación oficial.


Dudas en los comentarios, en el Slack de PEUM o en Twitter.


Vuejs para programadores jQuery. Form Input Errores III

Vuejs para programadores jQuery. 

Form Input Errores


En este post trabajaremos con la gestión de error. Usaremos un Form Input para seguir con el mismo elemento HTML. El único error que controlaremos será que el input NO este vacío.




No es una gestión extensa sino que por el contrario es simplemente un ejemplo de uso. La gestión de errores de un Form suele ser más compleja uses lo que uses pero aquí hacemos un acercamiento. Paciencia. Estamos aprendiendo. Todo llegará.


JQUERY


Enlaces:

Antes de empezar debo aclarar que mucho de la gestión de error de este ejemplo lo realiza Bootstrap. El método es sencillo. Debajo del elemento se crean dos div's con las clases valid-feedback e invalid-feedback y solo se muestran cuando el elemento HTML (en este caso el Form Input) tiene la clase valid o la clase invalid. Esto hace que el JS solo tenga que agregar o quitar la clase correspondiente del elemento.


El HTML resultante:


<form> <div class="form-group"> <label for="exampleInput">JQuery input Gestión error</label> <input type="text" class="form-control" id="exampleInput" aria-describedby="inputHelp"> <small id="inputHelp" class="form-text text-muted">Lo que escribas aquí se mostrara debajo</small> <div class="valid-feedback"> ¡Correcto!! </div> <div class="invalid-feedback"> Por favor ingrese un valor. </div> </div> <div> <span id="contenido"></span> </div> </form>


Esto nos lleva a un tema que no habíamos visto y es la gestión de clases CSS en elementos HTML. Conservamos la estructura anterior HTML con los cambios ya nombrados así que solo nos queda ir directamente al JS. Empecemos por jQuery. Lineas relevantes:


if (!exampleInput.val()) {

exampleInput.removeClass('is-valid').addClass('is-invalid')

} else {

exampleInput.removeClass('is-invalid').addClass('is-valid')

}

Es lo único que hemos agregado. En el if se valora la variable. Para JavaScript un objeto NULL es FALSE en un if y si el input no tiene ningún carácter (incluido espacios) es NULL y por lo tanto será FALSE


El if pregunta si el contenido del input es NULL y con !(NOT) invierte la respuesta. Por lo tanto en NULL será TRUE. Si ese es el caso se elimina la clase CSS 'is-valid' y se agrega la clase 'is-invalid', en el else se realiza la operación inversa.


VUEJS


Enlaces:


En primer código de VueJs era muy sencillo así que para esta validación hemos agregado algunas cosas:


En el input hemos hecho dos cambios:


<input type="text" class="form-control" id="exampleInputEmail1" :class="classInput" v-model="contenido" @input='inputValidate' aria-describedby="emailHelp">


Hemos agregado un :class que es una forma de indicarle a Vuejs que ese atributo del elemento HTML tiene un contenido que debe ser parseado y puede usarse con cualquier atributo de cualquier elemento HTML.


Más adelante seguiremos viendo ejemplos del uso de :class pero expliquemos un poco más el concepto:


Si escribimos cualquier atributo HTML de la siguiente forma:


attr="valor" el elemento HTML recibirá un valor (normalmente un string) que el atributo sabrá procesar, un ejemplo de ello es class="content". En este caso el elemento HTML entiende que hay una clase llamada content dentro del contenido css. Y buscará la relación con esa clase.


VueJs intenta no redefinir los atributos, por ello nos da una manera de indicarle cuando es un valor que debe procesar antes que el HTML muestre el elemento.


Lo normal es usar los dos puntos delante del atributo. Por ejemplo:


:class="content"


En este caso, ya antes que se rendericen los elementos HTML Vue sabe que tiene que resolver "content" y darle al HTML algo que entienda. ¿Qué puede ser content? Content puede ser una variable o un método que devuelva un valor. Vuejs busca el método o variable y resuelve el resultado, quita los : del atributo y cuando se renderiza el HTML es un atributo normal.


¿Se puede usar esta forma con cualquier atributo HTML? Si, se puede

¿Es un resultado estático o dinámico? La variable o método asociado al atributo actualiza el atributo cuando actualiza su valor. Mejor ejemplos:


principal = "button"


<div :class="principal">Mensaje</div>


Se convertirá en:


<div class="button">Mensaje</div>


y si cambiamos el valor de principal:


principal = "nav-button"


Inmediatamente el HTML cambiará a:


<div class="nav-button">Mensaje</div>


Espero que ayudara la explicación. En otros post volveremos sobre este tema


Se ha agregado también la relación del evento Input (comentado en el post anterior) con una función (@input='inputValidate'). Nótese que no es necesario agregar los paréntesis propios de una función y que los eventos se llaman con @nombredeevento que varia de jQuery que usa on-nombredeevento en los elementos HTML o el método on para asociar eventos y funciones


classInput es una variable. Veamos los cambios en el código JS


<script>

new Vue({

el: '#app',

data: {

contenido: '',

classInput: ''

},

methods: {

inputValidate() {

this.classInput = this.contenido === '' ? 'is-invalid' : 'is-valid'

}

}

})

</script>


Hemos agregado la variable classInput con un valor '' y vemos algo totalmente nuevo: Métodos. Un método en un objeto JS es lo que normalmente llamamos función pero es parte de ese objeto.

En Vuejs creamos un objeto interno llamado methods que contiene los métodos que usaremos.


InputValidate es el método que llamamos en el evento @input y dentro hace un simple if ternario. Por las dudas explicaremos como funciona un if ternario:



El if ternario hay que dividirlo en dos partes. La validación y la asignación. Veamos la validación:


this.contenido === '' ? 'is-invalid' : 'is-valid'


El if pregunta si this.contenido === '' en caso de ser TRUE (?) devuelve 'is-invalid' y en caso de ser FALSE (:) devuelve 'is-valid'


Una vez resuelto eso se le asigna a this.classInput que al cambiar de valor actualiza, sin necesidad de más acciones, el :class del Form Input



Enlaces:



Dudas en los comentarios, en el Slack de PEUM o en Twitter.






Vuejs para programadores jQuery. Form Input Simple II

Vuejs para programadores jQuery. 

Form Input Simple

El ejemplo más simple y útil que conozco es imprimir en un elemento HTML el contenido de un input form a medida que se escribe en él.


La idea es sencilla y ya nos acerca a los primeros conceptos diferenciales entre Vuejs y jQuery.
Pasaremos de la estructura HTML y las clases, ya que son según la estructura normal de Bootstrap. Pero si veremos algunos detalles cuando miremos el código de Vuejs.

JQUERY

Hablemos del código jQuery:
Enlaces:

<input aria-describedby="inputHelp" class="form-control" id="exampleInput" type="text" />

El input tiene un id de doble uso:
* El atributo está siendo usado por el elemento <label> para asignar la relación con la etiqueta
* Será la manera de identificar el elemento en jQuery
El otro elemento HTML relevante es:
<div>
<span id="contenido"></span>
</div>
El id del <span> es para poder escribir en el elemento el contenido del input como se explicara debajo.

El código script:
Hablemos de esta línea:
const exampleInput = jQuery('#exampleInput')

¿Por qué asigno el elemento a una variable y además constante? Cada vez que usamos jQuery('#id') estamos pidiéndole a jQuery que busque el elemento y construya una respuesta. Como el elemento lo usaremos varias veces es preferible que lo construya 1 vez y luego ir usándolo que pedirle que lo construya en cada invocación.

Esta asignación solo sucede una vez, ya que no vuelve a llamarse ese código por estar fuera de cualquier función. Siguiente linea:
exampleInput.on('input', actualiza )
Usamos el elemento creado con jQuery y le asociamos un evento: Input. ¿Por qué no usar el evento change? El evento change en un elemento input se actualiza cuando el elemento pierde el foco, por lo tanto no recibimos los cambios hasta que el usuario ha pulsado o elegido otro control. Esta no es una característica de jQuery sino de los eventos HTML.
En esa misma linea asociamos ese evento a una función: actualiza. No es necesario poner actualiza()

Lo que queda de código:
function actualiza() {
jQuery('#contenido').empty().append(exampleInput.val())
}
Creamos la función que actualizara nuestro contenido:

Con jQuery recogemos el elemento con id contenido (recordar que es un <span>) lo vaciamos (para no sobreescribir lo que ya está escrito) con empty() y a continuación agregamos contenido con append(). Lo que agregamos es el val() (o value) del form input.

VUEJS

Ahora le toca el turno a Vuejs.

Lo primero que veremos es que hemos agregado un id en el primer div debajo del body
<div class="container" id="app">

Cuando hablemos del script explicaremos como lo estamos usando.

El siguiente cambio es el input

<input type="text" class="form-control" id="exampleInputEmail1" v-model="contenido" aria-describedby="emailHelp">

En vuejs no necesitamos que los elementos tengan id pero a través de todo el proyecto se conservaran porque están siendo usados por los elementos <label> como referencia.
¿Qué es v-model? v-model asocia una variable a los cambios del elemento. Esta variable tendrá los cambios que se hagan en el input como también cambiara el input cuando se le asigne un valor.
Y este es un punto crítico de los frameworks reactivos. No tenemos que estar actualizando la variable o esperando el evento del elemento HTML para poder acceder a los últimos cambios. La variable SIEMPRE tendrá el último cambio sin que tengamos que hacer nada.

Si se quiere saber más este link puede ayudar:

Virtual DOM y VueJs: (en ingles) https://medium.com/js-dojo/vue-virtual-dom-13af62d2be41
Pero lo iremos viendo una y otra vez a través de los ejemplos. Sigamos adelante. Otro cambio en el HTML:

<div>
<span>{{contenido}}</span>
</div>
Lo primero a destacar es la eliminación de id, ya que no lo usaremos. Lo segundo es el uso de {{}} que simplemente es una indicación a para que vue sepa que tiene contenido que renderizar ahí. Lo tercero es que estamos usando la misma variable que el v-model.
<span>{{contenido}}</span> simplemente y resumido mostrará lo que tenga la variable en ese lugar del HTML. Y recordemos. Cuando el input cambie el contenido o la variable cambie en una asignación cambiara el valor mostrado aquí sin que tengamos que actualizarlo.
Por último vayamos al script
<script>
new Vue({
el: '#app',
data: {
contenido: ''
}
})
</script>
Lo primero que vemos es el operador new de Js que sirve para instancia una clase y así crear un objeto. En el constructor de la clase estamos pasando dos valores:
* el: Este valor indica el id (véase que se usa como en CSS o jQuery con el #) del elemento superior donde se usara Vuejs. Recordemos que este id lo hemos identificado como el primer cambio con respecto al HTML de jQuery y este es el único caso donde el id se usa en Vuejs.

* data: es un objeto que encierra las variables de Vue. En este caso solo usaremos una variable llamada "contenido" cuyo valor inicial es '' y será el contenido inicial del input.
Y no necesitamos nada más. De esta manera ya tendremos el valor actualizado en el <span> cada vez que se cambie el form input.

Index del proyecto Input simple:


Dudas en los comentarios, en el Slack de PEUM o en Twitter.

Vuejs para programadores jQuery. Presentación del proyecto. I

Vuejs para programadores jQuery.

Presentación del proyecto.

Este tutorial (o serie) se hará porque después de hablar con algunos programadores hemos notado que había una falta de información más explicita para desarrolladores jQuery (que es donde todos hemos estado) para comprender de forma práctica el cambio de paradigma de un framework reactivo.
En la mayoría de tutoriales los cambios son bastante apabullantes. Webpack, instaladores Cli, frameworks css, estructura de carpetas, etc.

La idea aquí es hacer el cambio lo más visual, simple, comparable y entendible posible. Para eso el tutorial adoptará algunas medidas:

* Se usará Bootstrap para la estética. La razón es que la mayoría de programadores jQuery ya usa Bootstrap y no habrá dudas o distracciones innecesarias en ese punto. La única novedad es que se usara Bootstrap Native. Sin dependencias

* Se usará Vue desde el cdn. Se hará así para reducir (notablemente) más cambios de estructura. Se ha elegido Vue porque es el framework que controlo. No es una imposición.

* No se pondrá ninguna de las dos opciones como mejor o peor. Se usará el mejor código posible y que cada uno valore. Todo el código es mejorable. Si se sugieren mejoras se tomaran en cuenta.

* El código fuente estará disponible, tanto en GitHub como en CodeSanBox.io para que pueda ser de fácil acceso y permita modificarlo para comprobar lo que haga falta

* El código tendrá un post o cada post tendrá un código, se puede ver de las dos formas. En el post se explicará lo que haga falta. Eso no quita que puedan haber post que se desvíen de la línea seguida porque falte aclarar algo.



Ahora vamos a explicar los templates y la forma de trabajo.

Cada proyecto se divide en carpetas que contienen 3 archivos:

Index -> Es un archivo HTML básico que contiene dos iframe para cargar los dos HTML (jQuery y Vuejs)
jQuery -> Es el código jQuery correspondiente
Vuejs -> El código Vuejs

En el archivo jQuery y Vuejs son iguales en cuanto a la estructura del body en HTML. Puede variar que jQuery tenga algún id más o Vuejs pueda tener código propio en los elementos pero la estructura de elementos y clases es idéntica (o por lo menos esa es la intención).

El nombre de los archivos intenta dar una indicación de lo que se trata en el archivo (además de la carpeta contenedora) así por ejemplo el trabajo con input simple contiene 3 archivos llamados así: indexInputSimple.html, jQueryInputSimple.html, vuejsInputSimple.html

Existe un archivo más en la raíz del programa. Es un HTML simple que sencillamente contiene una lista simple con un índice para cargar desde allí los proyectos hechos.

En cada post sé indicada la carpeta del proyecto que se trate y la URL del codesandbox.io correspondiente.

En este post toca el GitHub principal: https://github.com/Gonzalo2310/jQuery-Vuejs y el codesandbox.io se usará para la edición del contenido. Su uso es sencillo a las urls github.com hay que agregar simplemente la palabra box de la siguiente manera: githubbox.com. Así esta url de GitHub para codesanbox se convierte en: https://githubbox.com/Gonzalo2310/jQuery-Vuejs

Indice:
Por último dejo aquí una imagen del proyecto inicial. No quiere decir que no haya variaciones, es una guía de inicio.
Mind Map proceso


Dudas en los comentarios, en el Slack de PEUM o en Twitter.

Reto 100 Days of Code. La experiencia vivida a 25 días.

El reto de #100DaysOfCode está hecho sobre todo (pero no en exclusiva) para novatos que se inician en el mundo del código.

La idea principal es que se acostumbren a codificar por lo menos una hora diaria llevando adelante un proyecto en el lenguaje que deseen aprender.
Hasta aquí la teoría. Ahora hablemos de lo bueno y malo.
Comencé el reto en un lenguaje en el cual no soy novato (digamos que no estoy al inicio mejor) JavaScript. He creado un side-project que quiero llevar a cabo y me he adherido al reto. ¿Porque?

1- Soy un desastre en disciplina. 
2- No consigo ponerme horarios estables. 
3- En cuanto el proyecto avanza un poco pierdo las ganas y se me ocurre uno más "genial" y voy a por él.

Sin acción no hay realización.
Mi idea era comprometerme a llevar a cabo un side-project y comprobar que ese compromiso me obligaría a ser constante. Por eso inicie el reto.
He hablado con otras personas para saber la experiencia y algunas cosas que sacamos en conclusión:

 * Se vuelve más serio y real el estudio / proyecto que estes realizando.
 * Te crea el compromiso diario (hay quien incluye el fin de semana. Yo diría que codificar sábado y domingo es mala costumbre. Pero como casi todo en este reto es decisión personal)
* Conecta a la gente que recién empieza con otras personas y le da cierta visibilidad en las redes sociales (es lo que veo en Twitter)
* Se puede tuitear el desanimo, el entusiasmo, las dudas. El hashtag es retuiteado por bots y personas. Muchas veces responden a los tuits quitando la sensación de "soledad" que caracteriza los proyectos personales.

Detalles:
* En GitHub hay que mantener dos repositorios. Uno es una bitácora y el otro el código. La organización de la bitácora queda un poco criterio de cada uno pero al clonarlo tenemos plantillas de ejemplos en varios idiomas.

El otro lado de la moneda:
* La sensación de soledad no se quita del todo. Si hay un cierto movimiento cuando se publica el tuit con el hashtag pero en Twitter como en el slack de 100DaysOfcode la actividad es tibia si la hay.
* Puede provocar cierta obsesión si te lo tomas demasiado en serio y crear un estrés excesivo.
* Por otro lado si no lo haces con la seriedad suficiente como no hay controles ni presiones externas acabaras abandonando.
* Es difícil que con solo una hora diaria realmente logres avanzar en los proyectos siempre ya que hay problemas que te llevaran más tiempo. Enfrentado a este problema la resolución de seguir o no es personal y dependerá de como nos organizamos.

Mi consejo: 
* Si eres novato en cualquier lenguaje y lo quieres aprender hazlo. 
* Si por el contrario tienes un side project pero nunca encuentras el tiempo hazlo.
* Si necesitas que alguien te esté recordando que debes cumplir no lo hagas. 
* Si necesitas continuo apoyo mejor no hacerlo porque sentirás cierto desasosiego.

Mis Cambios:
Adapte el proyecto a mis necesidades aplicando ciertos cambios. Por ejemplo decidí que por ser más "veterano" no debía dar la sensación de que no hay vida cuando se programa. Por eso decidí no hacer el reto los sábados ni domingos. A menos no hacer los tuits, si codifico o no ya es según el tiempo pero elimine la obligación esos días (ojo, esto alarga el tiempo del reto)

Cada persona es un mundo y hacer el reto no es algo que conlleve gastos ni nada parecido. 
Yo diría que es bueno probar que tal. Tomarlo como una motivación y si llega a ser estresante entonces no continúes. Sobre todo porque para estrés ya vale la vida diaria.

P.D.: Por razones laborales tuve que para el proyecto el día 25. Reiniciaré de 0 de nuevo para lograr mis objetivos pero el reto no debe estar nunca por delante de la familia o el trabajo. Si tienes tiempo para realizarlo puede ser una buena experiencia pero si vas limitado de tiempo no es aconsejable agregar más estrés a tu vida.


Vuejs para programadores jQuery. Galería. Load More XVI

Vuejs para programadores jQuery. Galería. Load More XVI En el artículo de hoy vamos a tratar el tema de plugins de jQuery (crearemos dos) ...