SlideShare a Scribd company logo
1 of 21
Introducción a KNOCKOUT
Oscar Gensollen Arroyo
Arquitecto de Software
Consultor Senior
www.formativa.com.pe
oscar.gensollen@formativa.com.pe
@oscargensollen
Agenda
 ¿Qué es Knockout?
 Patrón MVVM.
 Creación de ViewModel y una View.
 Uso de Observables simples y calculados.
 Uso de Bindings
 Control de texto.
 Apariencia.
 Formularios.
 Control de flujo.
¿Qué es Knockout?
 Es una librería basada en JavaScript que permite crear interfaces de rápida
respuesta con un modelo limpio.
 Basada en el patron MVVM en tiempo real con sintáxis declarativa.
 Tres elementos fundamentales:
 Observables.
 Bindings.
 Templating.
 Es 100% lado cliente, pudiendo trabajar con cualquier tecnología del lado
servidor.
 Compacta (~13kb) y multinavegador (IE6+,FF2+,Chrome,Safari).
 Se complementa muy bien con otras librerías como jQuery.
 Ideal para UIs que se van hacienda complejas y deben adquirir
comportamientos basados en datos.
 No tiene dependencias.
Aplicacion knockoutjs típica
 Lado Cliente (MVVM):
 View(s) -> Bindings
 Model(s) -> Observables
 ViewModel(s) -> Funciones
 Lado Servidor:
 Endpoints RESTful
JSON
Componentes de Knockout
View ModelViewModel
Data-binding
Empezando con Knockout
1. Lo descargamos desde http://knockoutjs.com/downloads/index.html
2. Referenciamos la librería
CDNs
http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js
http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js
M-V-VM
 Patrón de diseño para interfaces, formado por:
 Un Modelo
 Representa objetos y operaciones del dominio.
 Independientes de la UI.
 Un View Model:
 Representación de código de los datos y operaciones a nivel de UI.
 Son 100% JavaScript, no HTML.
 Una View:
 Visible e interactiva representación del estado del ViewModel.
 Muestra información desde el VM, envía comandos y actualiza el estado cuando el
VM cambia.
Creación de un ViewModel
 Es igual a crear un Modelo, solo que adicionamos otro componente de KO que
son los observables.
 Ejemplo de un ViewModel:
var RegistrarClienteViewModel = {
Nombres: ko.observable(),
Apellidos: ko.observable(),
btnRegistrar: function(){
$.ajax(…
};
Creación de una View
 Se usa HTML normal combinado con expresiones de data-binding, empleando el
atributo “data-bind”:
<form id=“clienteForm" name=“clienteForm" method="POST">
<div>
<label class="form-label">Nombres:</label>
<input type="text" id="txtNombre"
name="txtNombre" data-bind="value:Nombre" />
</div>
<div>
<input type="button" id="btnSubmit"
value="Submit" data-bind = "click: submit" />
</div>
Activando Knockout
 Se debe activar KO para que el navegador reconozca los atributos “data-
bind”:
ko.applyBindings(RegistrarClienteViewModel);
 La activación se puede hacer para determinada zona (divCabecera en este
ejemplo):
ko.applyBindings(RegistrarClienteViewModel,
document.getElementById(‘divCabecera’);
Observables
 Son objetos JavaScript que notifican sobre cambios realizados sobre una
determinada propiedad.
 Normalmente el subscriptor principal es la View.
 También pueden identificar dependencias.
 Se implementan como funciones para ser compatibles con diferentes
navegadores.
Observables Simples
var ProductoViewModel = {
Color: ko.observable(‘Azul’),
Precio: ko.observable()
};
Observables y Notificaciones
 Los observables son “observados” mediante expresiones de enlace:
<input type=“text” id=“txtNombre” name=“txtNombre”
data-bind=“text: Nombre” />
 Cuando el valor de la propiedad cambia:
productoViewModel.Nombre(“Gaseosa”)
 El enlace hace que el cambio se aplique en el elemento DOM
correspondiente.
Observables Calculados
 Son funciones que dependen de uno o más observables.
 Se actualizan automáticamente cuando cualquiera de las dependencias
cambia.
function ProductoViewModel(){
// ...
this.NombreCompleto = ko.computed(function() {
return this.Nombre() + ‘ ‘ + this.Apellido();
}, this);
}
<span data-bind=“text: NombreCompleto”></span>
Bindings
 Son expresiones que permiten enlazar un elemento del DOM o una propiedad
de éste a una propiedad del ViewModel.
 Se definen en el mismo elemento usando el atributo “data-bind”.
<div data-bind=“visible: mostrarMensaje></div>
 Existen diferentes categorías como:
 Control de texto y apariencia.
 Campos de formulario.
 Control de flujo.
Bindings: Control de Texto y Apariencia
 visible, text, html, css, style, attr
<div data-bind=“visible: mostrarMensaje></div>
<span data-bind=“text: Marca”></span>
<div data-bind=“html: detalles”></div>
<div data-bind=“css: estadoGanancia”></div>
<div data-bind=“style: { color: gananciaActual() < 0 ?
‘red’ : ‘black’ }”></div>
<a data-bind=“attr: { href: url, title: detalles }”>
Bindings: Campos de formulario (1)
 click, event, submit, enable, disable, value, hasFocus, checked, options,
selectedOptions, uniqueName
<button data-bind=“click: registrarProducto></button>
<div data-bind=“event: { mouseover: mostrarDetalle,
mouseour: ocultarDetalle }”></span>
<form data-bind=“submit: procesarPedido”>...
<input type=“text” data-bind=“enable:
tieneCelular”></input>
Bindings: Campos de formulario (2)
 click, event, submit, enable, disable, value, hasFocus, checked, options,
selectedOptions, uniqueName
<input type=“checkbox” data-bind=“checked:
quiereRecibirBoletin”></input>
<select data-bind=“options: listaPaises, optionText:
‘nombrePais’, value: paisSeleccionado, optionsCaption:
‘Seleccione’></select>
Bindings: Control de Flujo (1)
 foreach, if, ifnot, with
<table>
<thead>
<tr><th>Nombre</th><th>Apellido</th></tr>
</thead>
<tbody data-bind="foreach: clientes">
<tr>
<td data-bind="text: nombre"></td>
<td data-bind="text: apellido"></td>
</tr>
</tbody>
</table>
Bindings: Control de Flujo (2)
 foreach, if, ifnot, with
<div data-bind="if: tieneBono">
Bono: <b data-bind="text: bono.Monto"> </b>
</div>
<p data-bind="with: posicion">
Latitud: <span data-bind="text: latitud">
</span>,
Longitud: <span data-bind="text: longitud">
</span>
</p>
 Charla (grabación):
https://www.dropbox.com/sh/khkz88ys9ybcu82/fg-yKFB2ST
 Demos (jsfiddle.net):
 a. Bindings simples y computed
http://jsfiddle.net/ogensollen/Jk5nv/
 b. Agregar elementos a una coleccion
http://jsfiddle.net/ogensollen/qswVR/1/
 c. Campos de formulario
http://jsfiddle.net/ogensollen/Kp8bz/
 d. Caso: reservaciones
http://jsfiddle.net/ogensollen/6muue/4/
 e. Caso: lista de contactos
http://jsfiddle.net/ogensollen/GRy86/1/
 Oscar Gensollen Arroyo
Arquitecto de Software
Consultor Senior
www.formativa.com.pe
oscar.gensollen@formativa.com.pe
@oscargensollen

More Related Content

What's hot

Online Library Management
Online Library ManagementOnline Library Management
Online Library ManagementVarsha Sarkar
 
Keamanan Komputer - Skema Kerberos
Keamanan Komputer - Skema Kerberos Keamanan Komputer - Skema Kerberos
Keamanan Komputer - Skema Kerberos Fatkhul Hadiningrat
 
Library Management System - V1.0
Library Management System - V1.0Library Management System - V1.0
Library Management System - V1.0JamesMuturi
 
Vb.net session 02
Vb.net session 02Vb.net session 02
Vb.net session 02Niit Care
 
Managing EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceManaging EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceInSync Conference
 
Data annotation validation (ASP.net)
Data annotation validation (ASP.net)Data annotation validation (ASP.net)
Data annotation validation (ASP.net)Jyotasana Bharti
 
Introductory Clojure Presentation
Introductory Clojure PresentationIntroductory Clojure Presentation
Introductory Clojure PresentationJay Victoria
 
데이터베이스 모델링
데이터베이스 모델링데이터베이스 모델링
데이터베이스 모델링Hoyoung Jung
 
Automated Train Ticket Validation and Verification System.
Automated Train Ticket Validation and Verification System.Automated Train Ticket Validation and Verification System.
Automated Train Ticket Validation and Verification System.Ajinkya Mohod
 
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryXML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryRachid NID SAID
 
Library_management_system_project_report.pdf
Library_management_system_project_report.pdfLibrary_management_system_project_report.pdf
Library_management_system_project_report.pdfKamal Acharya
 
Pharmacy Management System Proposal
Pharmacy Management System ProposalPharmacy Management System Proposal
Pharmacy Management System Proposalsudiahmad1
 
İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02Cihan Özhan
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJSstefanmayer13
 
Yash Agarwal - BCA Final Year
Yash Agarwal - BCA Final YearYash Agarwal - BCA Final Year
Yash Agarwal - BCA Final YearDezyneecole
 
Hostpital management system(srs)
Hostpital management system(srs)Hostpital management system(srs)
Hostpital management system(srs)maamir farooq
 

What's hot (17)

Online Library Management
Online Library ManagementOnline Library Management
Online Library Management
 
Keamanan Komputer - Skema Kerberos
Keamanan Komputer - Skema Kerberos Keamanan Komputer - Skema Kerberos
Keamanan Komputer - Skema Kerberos
 
Library Management System - V1.0
Library Management System - V1.0Library Management System - V1.0
Library Management System - V1.0
 
Vb.net session 02
Vb.net session 02Vb.net session 02
Vb.net session 02
 
Managing EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceManaging EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experience
 
Data annotation validation (ASP.net)
Data annotation validation (ASP.net)Data annotation validation (ASP.net)
Data annotation validation (ASP.net)
 
Introductory Clojure Presentation
Introductory Clojure PresentationIntroductory Clojure Presentation
Introductory Clojure Presentation
 
데이터베이스 모델링
데이터베이스 모델링데이터베이스 모델링
데이터베이스 모델링
 
Pharmacy management system project
Pharmacy management system  projectPharmacy management system  project
Pharmacy management system project
 
Automated Train Ticket Validation and Verification System.
Automated Train Ticket Validation and Verification System.Automated Train Ticket Validation and Verification System.
Automated Train Ticket Validation and Verification System.
 
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQueryXML Avancé : DTD, XSD, XPATH, XSLT, XQuery
XML Avancé : DTD, XSD, XPATH, XSLT, XQuery
 
Library_management_system_project_report.pdf
Library_management_system_project_report.pdfLibrary_management_system_project_report.pdf
Library_management_system_project_report.pdf
 
Pharmacy Management System Proposal
Pharmacy Management System ProposalPharmacy Management System Proposal
Pharmacy Management System Proposal
 
İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJS
 
Yash Agarwal - BCA Final Year
Yash Agarwal - BCA Final YearYash Agarwal - BCA Final Year
Yash Agarwal - BCA Final Year
 
Hostpital management system(srs)
Hostpital management system(srs)Hostpital management system(srs)
Hostpital management system(srs)
 

Similar to Introducción a Knockout

ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCDanae Aguilar Guzmán
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Sorey García
 
NET MAUI Terasoft.pptx
NET MAUI Terasoft.pptxNET MAUI Terasoft.pptx
NET MAUI Terasoft.pptxLuis775803
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Sorey García
 
Introducción a Backbone
Introducción a BackboneIntroducción a Backbone
Introducción a BackboneOscar Gensollen
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web componentsPedro J. Molina
 
Introduccion a j query
Introduccion a j queryIntroduccion a j query
Introduccion a j queryPablo Viteri
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsJavier Suárez Ruiz
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web ComponentsPedro J. Molina
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)Eudris Cabrera
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021lissette_torrealba
 

Similar to Introducción a Knockout (20)

ASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVCASP.NET MVC - Introducción a ASP.NET MVC
ASP.NET MVC - Introducción a ASP.NET MVC
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
 
NET MAUI Terasoft.pptx
NET MAUI Terasoft.pptxNET MAUI Terasoft.pptx
NET MAUI Terasoft.pptx
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
 
Introducción a Backbone
Introducción a BackboneIntroducción a Backbone
Introducción a Backbone
 
5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web components
 
Introduccion a j query
Introduccion a j queryIntroduccion a j query
Introduccion a j query
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.Forms
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
 
Angularjs
AngularjsAngularjs
Angularjs
 
ABI-Box
ABI-BoxABI-Box
ABI-Box
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Guía Practica conexión BD 2021
Guía Practica conexión BD  2021Guía Practica conexión BD  2021
Guía Practica conexión BD 2021
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
(25.03) RUN 09 - Sesiones Desarrollo - SI 2.0
 
patron de diseño MVVMo.pptx
patron de diseño MVVMo.pptxpatron de diseño MVVMo.pptx
patron de diseño MVVMo.pptx
 

Introducción a Knockout

  • 1. Introducción a KNOCKOUT Oscar Gensollen Arroyo Arquitecto de Software Consultor Senior www.formativa.com.pe oscar.gensollen@formativa.com.pe @oscargensollen
  • 2. Agenda  ¿Qué es Knockout?  Patrón MVVM.  Creación de ViewModel y una View.  Uso de Observables simples y calculados.  Uso de Bindings  Control de texto.  Apariencia.  Formularios.  Control de flujo.
  • 3. ¿Qué es Knockout?  Es una librería basada en JavaScript que permite crear interfaces de rápida respuesta con un modelo limpio.  Basada en el patron MVVM en tiempo real con sintáxis declarativa.  Tres elementos fundamentales:  Observables.  Bindings.  Templating.  Es 100% lado cliente, pudiendo trabajar con cualquier tecnología del lado servidor.  Compacta (~13kb) y multinavegador (IE6+,FF2+,Chrome,Safari).  Se complementa muy bien con otras librerías como jQuery.  Ideal para UIs que se van hacienda complejas y deben adquirir comportamientos basados en datos.  No tiene dependencias.
  • 4. Aplicacion knockoutjs típica  Lado Cliente (MVVM):  View(s) -> Bindings  Model(s) -> Observables  ViewModel(s) -> Funciones  Lado Servidor:  Endpoints RESTful JSON
  • 5. Componentes de Knockout View ModelViewModel Data-binding
  • 6. Empezando con Knockout 1. Lo descargamos desde http://knockoutjs.com/downloads/index.html 2. Referenciamos la librería CDNs http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js
  • 7. M-V-VM  Patrón de diseño para interfaces, formado por:  Un Modelo  Representa objetos y operaciones del dominio.  Independientes de la UI.  Un View Model:  Representación de código de los datos y operaciones a nivel de UI.  Son 100% JavaScript, no HTML.  Una View:  Visible e interactiva representación del estado del ViewModel.  Muestra información desde el VM, envía comandos y actualiza el estado cuando el VM cambia.
  • 8. Creación de un ViewModel  Es igual a crear un Modelo, solo que adicionamos otro componente de KO que son los observables.  Ejemplo de un ViewModel: var RegistrarClienteViewModel = { Nombres: ko.observable(), Apellidos: ko.observable(), btnRegistrar: function(){ $.ajax(… };
  • 9. Creación de una View  Se usa HTML normal combinado con expresiones de data-binding, empleando el atributo “data-bind”: <form id=“clienteForm" name=“clienteForm" method="POST"> <div> <label class="form-label">Nombres:</label> <input type="text" id="txtNombre" name="txtNombre" data-bind="value:Nombre" /> </div> <div> <input type="button" id="btnSubmit" value="Submit" data-bind = "click: submit" /> </div>
  • 10. Activando Knockout  Se debe activar KO para que el navegador reconozca los atributos “data- bind”: ko.applyBindings(RegistrarClienteViewModel);  La activación se puede hacer para determinada zona (divCabecera en este ejemplo): ko.applyBindings(RegistrarClienteViewModel, document.getElementById(‘divCabecera’);
  • 11. Observables  Son objetos JavaScript que notifican sobre cambios realizados sobre una determinada propiedad.  Normalmente el subscriptor principal es la View.  También pueden identificar dependencias.  Se implementan como funciones para ser compatibles con diferentes navegadores.
  • 12. Observables Simples var ProductoViewModel = { Color: ko.observable(‘Azul’), Precio: ko.observable() };
  • 13. Observables y Notificaciones  Los observables son “observados” mediante expresiones de enlace: <input type=“text” id=“txtNombre” name=“txtNombre” data-bind=“text: Nombre” />  Cuando el valor de la propiedad cambia: productoViewModel.Nombre(“Gaseosa”)  El enlace hace que el cambio se aplique en el elemento DOM correspondiente.
  • 14. Observables Calculados  Son funciones que dependen de uno o más observables.  Se actualizan automáticamente cuando cualquiera de las dependencias cambia. function ProductoViewModel(){ // ... this.NombreCompleto = ko.computed(function() { return this.Nombre() + ‘ ‘ + this.Apellido(); }, this); } <span data-bind=“text: NombreCompleto”></span>
  • 15. Bindings  Son expresiones que permiten enlazar un elemento del DOM o una propiedad de éste a una propiedad del ViewModel.  Se definen en el mismo elemento usando el atributo “data-bind”. <div data-bind=“visible: mostrarMensaje></div>  Existen diferentes categorías como:  Control de texto y apariencia.  Campos de formulario.  Control de flujo.
  • 16. Bindings: Control de Texto y Apariencia  visible, text, html, css, style, attr <div data-bind=“visible: mostrarMensaje></div> <span data-bind=“text: Marca”></span> <div data-bind=“html: detalles”></div> <div data-bind=“css: estadoGanancia”></div> <div data-bind=“style: { color: gananciaActual() < 0 ? ‘red’ : ‘black’ }”></div> <a data-bind=“attr: { href: url, title: detalles }”>
  • 17. Bindings: Campos de formulario (1)  click, event, submit, enable, disable, value, hasFocus, checked, options, selectedOptions, uniqueName <button data-bind=“click: registrarProducto></button> <div data-bind=“event: { mouseover: mostrarDetalle, mouseour: ocultarDetalle }”></span> <form data-bind=“submit: procesarPedido”>... <input type=“text” data-bind=“enable: tieneCelular”></input>
  • 18. Bindings: Campos de formulario (2)  click, event, submit, enable, disable, value, hasFocus, checked, options, selectedOptions, uniqueName <input type=“checkbox” data-bind=“checked: quiereRecibirBoletin”></input> <select data-bind=“options: listaPaises, optionText: ‘nombrePais’, value: paisSeleccionado, optionsCaption: ‘Seleccione’></select>
  • 19. Bindings: Control de Flujo (1)  foreach, if, ifnot, with <table> <thead> <tr><th>Nombre</th><th>Apellido</th></tr> </thead> <tbody data-bind="foreach: clientes"> <tr> <td data-bind="text: nombre"></td> <td data-bind="text: apellido"></td> </tr> </tbody> </table>
  • 20. Bindings: Control de Flujo (2)  foreach, if, ifnot, with <div data-bind="if: tieneBono"> Bono: <b data-bind="text: bono.Monto"> </b> </div> <p data-bind="with: posicion"> Latitud: <span data-bind="text: latitud"> </span>, Longitud: <span data-bind="text: longitud"> </span> </p>
  • 21.  Charla (grabación): https://www.dropbox.com/sh/khkz88ys9ybcu82/fg-yKFB2ST  Demos (jsfiddle.net):  a. Bindings simples y computed http://jsfiddle.net/ogensollen/Jk5nv/  b. Agregar elementos a una coleccion http://jsfiddle.net/ogensollen/qswVR/1/  c. Campos de formulario http://jsfiddle.net/ogensollen/Kp8bz/  d. Caso: reservaciones http://jsfiddle.net/ogensollen/6muue/4/  e. Caso: lista de contactos http://jsfiddle.net/ogensollen/GRy86/1/  Oscar Gensollen Arroyo Arquitecto de Software Consultor Senior www.formativa.com.pe oscar.gensollen@formativa.com.pe @oscargensollen