Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

[Tutorial] Comenzado con MVVM y Knockout.js - Parte 3: Agregar y remover elementos de Arreglos Observables.

Hola que tal? continuamos con este tutorial, esta vez con un pequeño ejemplo sobre las como agregar y remover objetos desde una colección observable, además veremos el como bindear atributos del DOM, como por ejemplo, el atributo Enable del botón para solo aceptar hasta 5  teléfonos.

Si no has visto los tutoriales anteriores, te aconsejo que los visites antes de seguir:

Parte 1
http://geeks.ms/blogs/gperez/archive/2012/08/13/tutorial-comenzado-con-mvvm-y-knockout-js.aspx

Parte 2
http://geeks.ms/blogs/gperez/archive/2012/08/22/tutorial-comenzado-con-mvvm-y-knockout-js-parte-2-propiedades-observables-e-iteraciones.aspx

En la siguiente animación podrás ver el comportamiento que vamos a logra. Lo nuevo en este ejemplo , como mencionábamos es:

  1. Agregar un input type=”number” para ingresar un nuevo teléfono a la colección
  2. Posibilidad de borrar estos teléfonos del ViewModel
  3. Mostrar la cantidad de teléfonos ingresados
  4. Inhabilitar el botón agregar cuando lleguemos a la cantidad de 5 teléfonos.

Ejemplo MVVM2

Veamos entonces el código que hace posible este funcionamiento. Primero que nada , en “clase” teléfono agregé un metodo que remueve de la colección de teléfonos del ViewModel a el objeto. Luego como puedes ver en el ViewModel hacemos un método addTelefono,que agregar un objeto teléfono obteniendo del valor desde el input tx_telefono, además y solo por un tema de demostración, envío una alerta con la cantidad de elementos de la colección

<script type="text/javascript">

            function telefono(numero) {

                return {

                    numero: ko.observable(numero),

                    borrar: function() {

                        PersonaViewModel.telefonos.remove(this);

                    }

                };

            }

 

 

var PersonaViewModel = {

      nombre: ko.observable("Juan Pablo"),

      apellidos: ko.observable("Pérez Nuñez"),

      edad: ko.observable(1),

      telefonos: ko.observableArray([new telefono(234234), 
                                     new telefono(565345
)]),

      addTelefono: function() {

      this.telefonos.push(
            
new telefono(document.getElementById("tx_telefono").value
));

             alert("Cantidad de Telefonos:" + this.telefonos().length);

            }

       };

 

      PersonaViewModel.nombreCompleto = ko.dependentObservable(function() {

          return this.nombre() + " " + this.apellidos();

       }, PersonaViewModel)

 

     ko.applyBindings(PersonaViewModel);

</script>     

Veamos el código html que da soporte al comportamiento:

<label for="tx_telefono">Telefono</label>
<input type="number" id="tx_telefono" />

<button data-bind="click: addTelefono, enable: telefonos().length<5">Agregar</button> Maximo 5 telefonos!


<h4>Telefonos (<span data-bind="text: telefonos().length" ></span>)</h4>
<ul data-bind="foreach: telefonos">
   <li>
     <span data-bind="text: numero"></span>
     <button data-bind="click: borrar" >Borrar</button>
    </li>
</ul>

Podemos ver que el botón para agregar nuevos teléfonos tiene dos binding de comportamientos, 1 que liga el click con el método addTelefono, otro binding con el atributo enable, en el cual podemos utilizar directamente una condición sobre el ViewModel, en este caso, mientras sean menor a 5 (4 elementos) el largo de la colección el botón permanecerá activo, obviamente esto se logra ya que la condición va a retornar verdadero o falso y se asignará al atributo enable.

Para borrar, se hace algo muy parecido, se hace el binding con la función borrar simplemente, recordemos que estamos bajo el contexto de cada elemento de la colección de teléfonos mediante el foreach, por lo que al presionar borrar se entiende que estamos llamando a la función con el argumento que contiene propio objeto en cuestión, por eso es que podemos hacer remove(this).

Y por último, que ya se me olvidaba, creamos un span en donde al igual que el mensaje, muestro la cantidad de teléfonos que se han ingresado, haciendo binding de la propiedad text.

Como ves, bastante interesante este nuevo esquema, voy a seguir posteando tutoriales y luego unirlo con ASP.NET WEB API.

Por último te dejo el link de descarga:
https://dl.dropbox.com/u/1303802/MVVM1.zip

Saludos!
@chalalo

Posted: 6/9/2012 0:53 por Gonzalo Perez | con 2 comment(s)
Archivado en: ,
Comparte este post:

Comentarios

MVP Factor ha opinado:

Nuestro buen amigo Gonzalo Pérez C nos comparte su tutorial: [Tutorial] Comenzado con MVVM y Knockout

# September 19, 2012 11:58 PM

Chalalo Land ha opinado:

Hola!, continuamos con la serie de tutoriales, este en realidad es una anexo del tutorial anterior, en

# September 21, 2012 5:10 PM