SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
El	Proyecto	Polymer	
Programación	Orientada	a	
Componentes	Web	
Febrero	2015
@javiervelezreye		2		
Autor	
El	Proyecto	Polymer	
Licenciado	en	informá1ca	por	la	UPM	desde	el	año	2001	y	doctor	
en	 informá1ca	 por	 la	 UNED	 desde	 el	 año	 2009,	 Javier	 es	
inves1gador	y	su	línea	de	trabajo	actual	se	centra	en	la	innovación	
y	desarrollo	de	tecnologías	de	Componentes	Web.	Además	realiza	
ac1vidades	 de	 evangelización	 y	 divulgación	 en	 diversas	
comunidades	IT,	es	Polymer	Polytechnic	Speaker	y	co-organizador	
del	grupo	Polymer	Spain	que	conforma	una	comunidad	de	interés	
de	 ámbito	 nacional	 en	 relación	 al	 framework	 Polymer	 y	 a	 las	
tecnologías	de	Componentes	Web.		
I.	¿Quién	Soy?	
	
II.	¿A	Qué	Me	Dedico?	
	
javier.velez.reyes@gmail.com	
@javiervelezreye	
linkedin.com/in/javiervelezreyes	
gplus.to/javiervelezreyes	
jvelez77	
javiervelezreyes	
youtube.com/user/javiervelezreyes	
Polymer	Polytechnic	Speaker	
Co-organizador	de	Polymer	Spain		
Evangelización	Web	
Desarrollador	JS	Full	stack	
Arquitectura	Web	
Formación	&	Consultoría	IT	
e-learning
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
1	Introducción	
§  Qué	es	un	Componente	Web	
§  Por	Qué	los	Componentes	Web	
§  La	Web	Como	Plataforma	de	Componentes	
§  Un	Nuevo	Modelo	de	Roles		
Introducción	
El	Proyecto	Polymer
@javiervelezreye		4		
Introducción	
El	Proyecto	Polymer	
Qué	Son	Los	Componentes	Web	
	
La	 tecnología	 de	 Componentes	 Web	 proporciona	
un	mecanismo	para	construir	nuevas	e1quetas	de	
autor	personalizadas	que	incluyen	una	semán1ca,	
un	 comportamiento	 funcional	 y	 una	 lógica	 de	
presentación	propia.	
E1quetas	de	Autor	
Componentes	Web
@javiervelezreye		5		
Introducción	
El	Proyecto	Polymer	
Por	Qué	Componentes	Web	
Un	 Componente	 Web	 encapsula	 cierta	 lógica	
funcional	 y	 presentacional	 elaborada	 que	 se	
ac1va	 desde	 el	 navegador	 como	 una	 simple	
e1queta	estándar	de	HTML.	
Encapsulación	De	La	Lógica	
Comportamiento	AdaptaRvo	
Los	 componentes	 se	 desarrollan	 para	 hacerse	
responsables	de	la	ges1ón	del	espacio	en	el	área	
de	 presentación,	 de	 las	 necesidades	 de	
accesibilidad	 y	 las	 preocupaciones	 generales	 de	
usabilidad.	
RWD	&	AWD	
Accesibilidad	
Usabilidad
@javiervelezreye		6		
Introducción	
Principios	de	Diseño	en	Componentes	Web	
Por	Qué	Componentes	Web	
Los	 componentes	 Web	 también	 fomentan	 un	
proceso	 de	 diseño	 Web	 que	 1ende	 a	 la	
homogenización	lo	que	desde	un	punto	de	vista	
corpora1vo	resulta	ventajoso.	
Homogenización	Del	diseño	
GesRón	De	La	Evolución	Centralizada	
La	 lógica	 de	 presentación	 de	 los	 componentes	
Web	 se	 puede	 adaptar	 evolu1vamente	 bajo	
demanda	 de	 las	 necesidades	 empresariales	 sin	
impactar	 en	 el	 correcto	 funcionamiento	 de	 los	
aplica1vos	 y	 si1os	 web	 que	 hacen	 uso	 de	 los	
mismos.	
Restaurante Diversia
9.7 (51)
Casa de Campo
Puerta del Sol
Plaza Mayor
Línea	evoluDva	
t1	 t2	 t3	
Los	usuarios	perciben	los	
cambios	instantáneamente	
v1	 v2	 v3
@javiervelezreye		7		
Introducción	
El	Proyecto	Polymer	
Por	Qué	Componentes	Web	
La	 tecnología	 de	 componentes	 Web	 ofrece	 la	
posibilidad	 de	 exponer	 los	 servicios	 de	 una	
organización	 en	 forma	 de	 un	 conjunto	 de	
e1quetas	visuales	que	conectan	con	capacidades	
de	negocio.	
Orientación	A	La	Vista	
Construcción	ComposiRva	
Como	 cualquier	 otra	 e1queta	 estándar	 los	
componentes	Web	pueden	conectarse	de	forma	
composi1va	 a	 través	 de	 las	 relaciones	 de	
anidamiento	 y	 propagación	 de	 eventos	 que	
soporta	la	Web.	
C	
R	
U	
D	
Servicios	REST	
HTTP	
Usuario	
Programador	
Usuario	
Final	
Los	componentes	Web	
están	orientación	a	la	vista
@javiervelezreye		8		
Introducción	
El	Proyecto	Polymer	
La	Web	Como	Plataforma	De	Componentes	
	 La	Web	se	presenta	como	una	plataforma	de	hospedaje	para	una	colección	de	componentes	
con	 un	 comportamiento	 funcional	 subyacente	 que	 se	 comunican	 y	 coordinan	 entre	 si,	 de	
acuerdo	 a	 diferentes	 esquemas	 para	 ofrecer	 servicios	 de	 valor	 en	 el	 contexto	 de	 la	 página	
donde	se	inscriben.	
Incluye	 todas	 las	 nuevas	 capacida-
des	 que	 exDenden	 la	 Web	 como	
plataforma	de	orientación	a	compo-
nentes	
Plataforma	
Capacidades	funcionales	sobre	
la	 plataforma	 que	 simplifican	
el	 proceso	 de	 desarrollo	 de	
Componentes	Web	
Core	
Aplicaciones	 orientadas	 a	
componentes	al	servicio	de	
los	usuarios	de	la	Web	
Aplicaciones	
Componentes	estándar	dedicados	a	
dar	 respuesta	 a	 necesidades	
recurrentes	 de	 control	 o	 UI	 que	
surgen	en	el	desarrollo	orientado	a	
Componentes	Web	
Elementos
@javiervelezreye	9		
Introducción	
El	Proyecto	Polymer	
Un	Nuevo	Modelo	De	Roles		
	 Conviene	señalar	que,	en	el	marco	de	este	nuevo	proceso	de	construcción	de	soluciones	para	
la	Web	basadas	en	componentes,	se	requieren	nuevos	roles	de	especialización	técnica	y	flujos	
de	trabajo	establecidos.	A	con1nuación	bosquejamos	los	mismos.	
Diseñador	Web	
EsDliza	los	contenidos	de	
acuerdo	a	directrices	
presentacionales	
Maquetador	Web	
Establece	la	estructura	de	los	
contenidos	de	acuerdo	a	
directrices	semánDcas	
Establece	el	modelo	de	
comportamiento	en	reacción	a	los	
eventos	de	interacción	del	usuario	
CSS	
JS	
En	la	Web	Clásica…	
.className	
HTML	
Programador	Web
@javiervelezreye	10		
Introducción	
El	Proyecto	Polymer	
Un	Nuevo	Modelo	De	Roles		
Conviene	señalar	que,	en	el	marco	de	este	nuevo	proceso	de	construcción	de	soluciones	para	
la	Web	basadas	en	componentes,	se	requieren	nuevos	roles	de	especialización	técnica	y	flujos	
de	trabajo	establecidos.	A	con1nuación	bosquejamos	los	mismos.	
Diseñador	de	Componentes	
Define	el	modelo	de	rendering	
del	componente	de	acuerdo	a	
directrices	de	esDlo	
Establece	la	estructura	de	los	
contenidos	internos	que	presenta	el	
componente	cuando	se	renderiza	
Programador	de	Componentes	
Establece	el	modelo	de	
comportamiento	subyacente	que	
se	acDva	cuando	se	renderiza	el	
componente		
CSS	
JS	
En	la	Web	Orientada	
a	Componentes…	
<content>	
.className	
HTML	
Maquetador	de	Componentes
@javiervelezreye	11		
Introducción	
El	Proyecto	Polymer	
Un	Nuevo	Modelo	De	Roles	
Conviene	señalar	que,	en	el	marco	de	este	nuevo	proceso	de	construcción	de	soluciones	para	
la	Web	basadas	en	componentes,	se	requieren	nuevos	roles	de	especialización	técnica	y	flujos	
de	trabajo	establecidos.	A	con1nuación	bosquejamos	los	mismos.	
CSS	
JS	
En	la	Web	Orientada	
a	Componentes…	
css	binding	
HTML	
.className	
Diseñador	de	Componentes	
Define	el	modelo	de	rendering	
del	componente	de	acuerdo	a	
directrices	de	esDlo	
Establece	la	estructura	de	los	
contenidos	internos	que	presenta	el	
componente	cuando	se	renderiza	
Programador	de	Componentes	
Establece	el	modelo	de	
comportamiento	subyacente	que	
se	acDva	cuando	se	renderiza	el	
componente		
Maquetador	de	Componentes
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
2	Estándares	En	
Componentes	
Web	
§  Modelo	de	Encapsulamiento.	Shadow	DOM	
§  Modelo	de	Renderizado.	HTML	Templates	
§  Modelo	de	Extensión.	Custom	Elements	
§  Modelo	de	Modularización.	HTML	Imports	
Introducción	
El	Proyecto	Polymer
@javiervelezreye		13		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
4	Estándares	Independientes	
	 El	modelo	de	componentes	para	la	Web	definido	por	la	W3C	consiste	
en	 cuatro	 especificaciones	 tecnológicamente	 independientes	 que	
cubren	dis1ntos	aspectos	del	proceso	construc1vo.	A	lo	largo	de	este	
capítulo	 revisaremos	 los	 Estándares	 En	 Componentes	 Web	 que	 se	
manejan	en	relación	a	tales	especificaciones.	
Shadow	DOM	
Ofrece	 un	 modelo	 de	 encapsula-
miento	 que	 permite	 aislar	 el	
contenido	interno	del	componente	
de	aquél	en	la	página	donde	éste	
es	renderizado	
HTML	Templates	
Ofrece	 un	 modelo	 de	 construcción	
basado	 en	 planDllas	 inertes	 de	
código	HTML	que	sólo	son	acDvadas	
cuando	se	renderiza	el	componente	
HTML	Imports	
Ofrece	un	modelo	de	modulariza-
ción	 basado	 en	 la	 posibilidad	 de	
incluir	 ficheros	 de	 código	 HTML	
dentro	de	otros	ficheros	HTML	
Custom	Elements	
Ofrece	un	modelo	de	extensibilidad	
que	 permite	 a	 los	 desarrolladores	
definir	 sus	 propias	 eDquetas	 o	
redefinir	 semánDcamente	 las	
eDquetas	del	estándar	DOM
@javiervelezreye	14		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Sin	más	infraestructura	de	soporte,	los	iden1ficadores	JS	y	CSS	u1lizados	internamente	dentro	
de	cada	componente	podrían	colisionar	con	los	usados	dentro	de	la	página	huésped	o	en	otros	
componentes	residentes.	Es	necesario	proporcionar	un	mecanismo	de	encapsulamiento	que	
aísle	cada	instancia	de	componente	del	resto	de	instancias	y	de	la	propia	página.	
El	Problema	
<button id='btn'>
<button/>
index.html	
<button id='btn'>
<button/>
Click	
Click	
document.querySelector ('#btn')
.on ('click', function () {
...
});
document.querySelector ('#btn')
.on ('click', function () {
...
});
Si	usamos	dos	instancias	del	mismo	
Dpo	 de	 componente	 los	 códigos	
verDdos	a	la	página	anfitriona	para	
cada	 instancia	 serán	 idénDcos	 y	
colisionarán	entre	sí	ya	que	se	usan	
idenDficadores	homónimos	
Colisión	de	IdenIficadores
@javiervelezreye	15		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Es	necesario,	por	tanto,	proporcionar	un	mecanismo	de	encapsulación	que	aísle	cada	instancia	
de	 componente	 del	 resto	 de	 instancias	 y	 de	 la	 propia	 página.	 desde	 un	 punto	 de	 vista	
conceptual,	 es	 posible	 clasificar	 los	 1pos	 de	 aislamiento	 necesarios	 en	 tres	 categorías	
diferentes	de	acuerdo	a	la	relación	de	los	elementos	en	potencial	conflicto.	
La	Solución	
Contenido	Tipo	A	
.foo
.bar
Contenido	Tipo	A	
.foo
.bar
Contenido	Tipo	B	
.baz
.foo
Contenido	Tipo	A	
.foo
.bar
index.html	 index.html	
Contenido	Tipo	A	
.foo
.bar
.foo
index.html	
Aislamiento	entre	componentes	Aislamiento	con	la	página	anfitriona	
Aislamiento	entre	instancias
@javiervelezreye	16		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
El	proceso	de	encapsulación	consiste,	esencialmente,	en	generar	nuevos	árboles	DOM	para	
albergar	los	contenidos	de	cada	instancia	de	componente	Web	y	vincularlos	a	ciertos	nodos	de	
la	página	anfitriona.	De	esta	manera	se	consigue	que	dichos	contenidos	residan	en	un	espacio	
de	nombres	exclusivo	y	aislado	del	de	los	demás	y	del	de	la	propia	página.	
Shadow	DOM	&	Shadow	HOST	
Light	DOM	
.shadowRoot
Shadow	DOM	
Shadow	Host	
El	 Shadow	 Host,	 que	 puede	 ser	
cualquier	eDqueta	HTML,	es	un	
nodo	 de	 la	 página	 anfitriona	
que	 vincula	 una	 instancia	 de	
componente	a	dicha	página	
Shadow	Root	
El	 Shadow	 Root	 es	 un	 nodo	
de	 Dpo	 DocumentFragment	
que	 se	 corresponde	 con	 la	
raíz	 del	 árbol	 DOM	 del	
contenido	encapsulado	por	el	
componente	
.host
Componente
@javiervelezreye	17		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
El	proceso	de	encapsulación	consiste,	esencialmente,	en	generar	nuevos	árboles	DOM	para	
albergar	los	contenidos	de	cada	instancia	de	componente	Web	y	vincularlos	a	ciertos	nodos	de	
la	página	anfitriona.	De	esta	manera	se	consigue	que	dichos	contenidos	residan	en	un	espacio	
de	nombres	exclusivo	y	aislado	del	de	los	demás	y	del	de	la	propia	página.	
Shadow	DOM	&	Shadow	HOST	
Light	DOM	
.shadowRoot
Shadow	DOM	
.host
Componente	1
En	 los	 navegadores	 sin	 soporte	 a	
componentes	 web	 se	 aplica	 el	
algoritmo	de	renderizado	habitual.	
Como	 el	 shadow	 DOM	 no	 es	
accesible	 por	 este	 algoritmo,	 el	
componente	 no	 se	 renderiza	 y	 se	
conDnúa	por	el	recorrido	habitual	
Renderizado	normal	
1
2
Cuando	el	soporte	a	componentes	
web	 está	 acDvo,	 el	 algoritmo	 de	
renderizado	 discrimina	 entre	
nodos	 normales	 y	 nodos	 shadow	
host.	 En	 éstos	 úlDmos,	 deriva	 el	
proceso	 de	 renderizado	 para	
mostrar	 el	 contenido	 del	 shadow	
DOM	mientras	el	Light	DOM	no	se	
muestra	
Renderizado	shadow	
2
@javiervelezreye	18		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Desde	 la	 especificación	 de	 Shadow	 DOM,	 la	 única	 manera	 de	 crear	 esta	 estructura	 dual	 de	
contenidos	 es	 a	 través	 de	 JavaScript.	 Para	 ello,	 se	 ex1ende	 el	 nodo	 Element	 con	 un	 nuevo	
método	 para	 la	 creación	 de	 nodos	 Shadow	 Root	 que	 se	 vinculan	 automá1camente	 al	 nodo	
sobre	el	que	se	aplican	convir1éndolo	así	en	un	Shadow	Host.	
Shadow	DOM	&	Shadow	HOST	
<div id="myHost">
contenido del light dom
</div>
<script>
var host = document.querySelector('#myHost');
var root = host.createShadowRoot();
root.innerHTML = "contenido del Shadow DOM";
</script>
Cualquier	 Dpo	 de	 nodo	 DOM	 puede	 ser	
converDdo	 en	 Shadow	 Host.	 Para	 ello	 es	
necesario	uDlizar	alguno	de	los	mecanismos	
de	 referencia	 disponibles	 	 en	 HTML	 que	
permitan	 seleccionar	 el	 nodo	 desde	
JavaScript		
Shadow	Host	
Primero	 se	 localiza	 el	 nodo	 que	 hará	 de	
anfitrión	 y	 se	 convierte	 en	 shadow	 host	
creando	en	él	un	nodo	shadow	root.	Después	
sólo	queda	inyectar	contenido	HTML	en	este	
nuevo	 nodo	 por	 cualquier	 mecanismo	
estándar	para	crear	el	Shadow	DOM			
Shadow	Root
@javiervelezreye	19		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Es	posible	definir	múl1ples	árboles	en	la	sombra	organizados	por	capas.	El	Shadow	Host	sigue	
reteniendo	 un	 enlace	 al	 ShadowRoot	 más	 reciente.	 Desde	 éste	 se	 puede	 recorrer	
sucesivamente	cada	Shadow	DOM	a	través	de	enlaces	olderShadowRoot.	Y	por	úl1mo,	cada	
Shadow	Root	dispone	de	una	referencia	al	Shadow	Host.	
Shadow	DOM	Por	Capas	
Light	DOM	
Página	Huésped	
.olderShadowRoot
.host
.host
.host
.shadowRoot
.olderShadowRoot
Youngest	
Shadow	DOM	
Oldest	
Shadow	DOM	
Desde	 cada	 Shadow	 Root	 se	
puede	acceder	al	anterior	a	través	
de	 enlaces	 olderShadowRoot	 a	
excepción	del	úlDmo	que	Dene	un	
valor	null	en	este	enlace			
Cada	 Shadow	 Root	 manDene	
una	referencia	directa	(host)	al	
Shadow	 Host	 que	 ancla	 el	
componente	 a	 la	 página	
anfitriona	
Shadow	DOM	
por	Capas	
Referencia	al	Shadow	Host	
Recorrido	por	la	cadena	de	capas
@javiervelezreye	20		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Para	 crear	 una	 estructura	 mul1capa	 simplemente	 es	 necesario	 invocar	 repe1damente	 el	
método	createShadowRoot	sobre	el	nodo	Host.	Cada	vez	que	se	llama	a	este	método	se	crea	
un	nuevo	ShadowRoot	que	se	establece	como	primera	capa	de	acuerdo	a	la	arquitectura	de	
enlaces	anterior.	Una	vez	que	se	crea	un	enlace	Shadow	Root	es	imposible	eliminarlo.	
Shadow	DOM	Por	Capas	
<div id="myHost">
contenido del light dom
</div>
<script>
var host = document.querySelector('#myHost');
var root1 = host.createShadowRoot();
var root2 = host.createShadowRoot();
var root3 = host.createShadowRoot();
root1.innerHTML = ...
root2.innerHTML = ...
root3.innerHTML = ...
</script>
Igual	 que	 antes	 es	 necesario	 hacer	 uso	 de	
alguno	 de	 los	 mecanismos	 de	 referencia	 de	
HTML	para	poder	acceder	al	nodo	DOM	que	
hará	 de	 Shadow	 Host	 desde	 el	 código	
JavaScript	
Shadow	Host	
Cada	 vez	 que	 se	 invoca	 al	 método	
createShadowRoot	 se	 genera	 un	 nuevo	
Shadow	 DOM	 que	 se	 establece	 como	
primera	 capa	 dentro	 de	 la	 arquitectura	 de	
enlaces		
Shadow	Roots
@javiervelezreye	21		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
Los	componentes	Web	pueden	construirse	a	través	de	procesos	de	anidamiento	de	manera	
que	un	componente	interno	pueda	hospedarse	dentro	del	Shadow	DOM	de	otro	componente	
externo.	 El	 papel	 del	 modelo	 de	 encapsulación	 en	 este	 1po	 de	 escenarios	 de	 anidamiento	
man1ene	la	garanba	de	la	ausencia	de	colisión	para	cada	componente	par1cipante.	
Shadow	DOM	Anidado	
.shadowRoot
.host
C.	Externo	
C.	Interno	
.host
.shadowRoot
El	 componente	 externo	 actúa	
como	 anfitrión	 respecto	 al	
componente	interno	
El	 componente	 interno	 actúa	
como	 huésped	 en	 la	 relación	
de	 anidamiento	 con	 el	
componente	externo		
Rol	anfitrión	
Rol	huésped
@javiervelezreye	22		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
El	 proceso	 de	 creación	 de	 componentes	 anidados	 requiere	 iden1ficar	 el	 nodo	 Host	 del	
componente	 externo	 y	 crear	 un	 Shadow	 Root	 donde	 se	 inyecta	 un	 contenido	 HTML.	 Este	
contenido	 incluye	 todo	 el	 cuerpo	 del	 Light	 DOM	 del	 componente	 interno.	 Finalmente	 es	
preciso	crear	un	Shadow	Root	para	el	componente	interno	e	inyectarle	su	contenido	HTML.	
Shadow	DOM	Anidado	
antes del componente externo
<div id="outerHost"> ... </div>
después del componente externo
<script>
var outerHost = document.querySelector('#outerHost');
var outerRoot = outerHost.createShadowRoot();
outerRoot.innerHTML =
'antes del componente interno' +
' <div id="innerHost"> Light DOM interno </div> ' +
'después del componente interno';
var innerHost = outerRoot.querySelector('#innerHost');
var innerRoot = innerHost.createShadowRoot();
innerRoot.innerHTML = 'en el componente interno';
</script>
Se	 idénDca	 el	 nodo	 que	 servirá	 de	 anfitrión	
para	 hospedar	 el	 componente	 externo	 y	
poder	accederlo	desde	JavaScript	
Componente	externo	
Primero	 se	 crea	 el	 Shadow	 Root	 del	 compo-
nente	 externo	 y	 se	 inyectan	 los	 contenidos	 de	
su	Shadow	DOM	que	encapsulan	al	Light	DOM	
del	 componente	 interno.	 Después	 se	 crea	 el	
Shadow	Root	del	componente	interno	 	y	se	le	
inyecta	su	contenido	HTML	
Anidamiento	de	componente	Interno
@javiervelezreye	23		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
En	componentes	simples	el	Shadow	DOM	puede	requerir	acceder	de	forma	discrecional	a	la	
información	 de	 configuración	 contenida	 dentro	 del	 Light	 DOM	 para	 que	 forme	 parte	 del	
proceso	 de	 rendering	 del	 componente.	 Gracias	 a	 este	 mecanismo	 se	 consigue	 adaptar	 el	
aspecto	y	comportamiento	de	cada	instancia	de	componente	a	su	contexto	de	uso.	
Distribución	De	Contenidos	
Light	DOM	 Shadow	DOM	
Componente	
El	 shadow	 DOM	 podría	 necesitarse	
acceder	 de	 forma	 discrecional	 a	
partes	 de	 la	 información	 Light	 DOM	
para	 arDcular	 su	 renderizado.	
Necesitamos	 un	 mecanismo	 de	
referencia	 de	 información	 desde	 el	
Shadow	DOM	al	Light	DOM	
Referencia	de	información	
El	Light	DOM	conDene	informa-ción	
semánDca	 sobre	 la	 configura-ción	
del	 componente	 que	 permite	
adaptar	 su	 aspecto	 y	 comporta-
miento	
Información	de	configuración	
.shadowRoot
?
@javiervelezreye	24		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
En	componentes	simples	el	Shadow	DOM	puede	requerir	acceder	de	forma	discrecional	a	la	
información	 de	 configuración	 contenida	 dentro	 del	 Light	 DOM	 para	 que	 forme	 parte	 del	
proceso	 de	 rendering	 del	 componente.	 Gracias	 a	 este	 mecanismo	 se	 consigue	 adaptar	 el	
aspecto	y	comportamiento	de	cada	instancia	de	componente	a	su	contexto	de	uso.	
Distribución	De	Contenidos	
Light	DOM	 Shadow	DOM	
Componente	
El	 shadow	 DOM	 podría	 necesitarse	
acceder	 de	 forma	 discrecional	 a	
partes	de	
Punto	de	Inserción	de	Contenido	
Se	dice	que	el	conjunto	de	nodos	del	
Light	DOM	que	se	ven	afectados	por	
el	 proceso	 de	 selección	 se	
distribuyen,	 durante	 el	 renderiza-
do,	al	punto	de	inserción	dentro	del	
Shadow	DOM	
Nodos	Distribuidos	
.shadowRoot
<content select='…'>
@javiervelezreye	25		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
El	diseño	del	Light	DOM	debe	anotarse	semán1camente	de	manera	apropiada	para	que	pueda	
referirse	mediante	expresiones	de	selección	CSS	a	par1r	de	las	e1quetas	content	que	figuran	
dentro	del	Shadow	DOM.	Hasta	cierto	punto	puede	considerarse	que	las	e1quetas	content	son	
un	mecanismo	de	inyección	paramétrica	de	los	valores	mantenidos	por	el	Light	DOM.		
Distribución	De	Contenidos	
<div class="product">
<div class="type">Food</div>
<div class="name">Pears</div>
</div>
<script>
var host = document.querySelector('#myHost');
var root = host.createShadowRoot();
root.innerHTML =
'<ul>' +
' <li>Type: <content select=".type"></content></li>' +
' <li>Name: <content select=".name"></content></li>' +
' <li>Amount: <content select=".amount">1</content></li>' +
'</ul>'
</script>
El	Light	DOM	conDene	la	información	que	va	
a	ser	referida	desde	los	puntos	de	inserción	
de	contenido	presentes	en	el	Shadow	DOM	
Light	DOM	
El	 Shadow	 DOM	 conDene	 puntos	 de	
inserción	 para	 referir	 a	 la	
información	del	Light	DOM		
Shadow	DOM	&	Content	Select
@javiervelezreye	26		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
En	los	escenarios	de	componentes	construidos	por	capas,	es	necesario,	adicionalmente	a	lo	
anterior,	disponer	de	un	mecanismo	que	permita	acceder	desde	cada	capa	a	la	información	
contenida	 en	 la	 inmediatamente	 inferior.	 De	 esta	 manera,	 cada	 capa	 se	 concibe	 como	 una	
decoración	que	contribuye	a	enriquecer	el	contenido	de	la	que	1ene	por	encima.	
Distribución	De	Contenidos	En	La	Sombra	
Es	 necesario	 un	 mecanismo	 de	
acceso	 a	 los	 contenidos	 en	 la	
sombra	 que	 permita	 a	 una	 capa	
recuperar	el	contenido	mantenido	
por	la	capa	inferior	
Desde	 cada	 capa	 se	 puede	
seguir	accediendo	normalmente	
a	 los	 contenidos	 en	 el	 Light	
DOM	 por	 medio	 de	 la	 eDqueta	
content	
Light	DOM	
Acceso	a	la	Capa	Inferior	
Light	DOM	
.shadowRoot
Shadow	DOM	
por	Capas	
.olderShadowRoot
.olderShadowRoot
Nodo	de	contenido	en	capa	 Punto	de	inserción	en	la	sombra	
<content> <shadow>
@javiervelezreye	27		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Encapsulamiento.	Shadow	DOM	
De	manera	similar	a	la	distribución	de	contenidos	existe	una	e1queta	shadow	que	permite	a	un	
shadow	 DOM	 capturar	 todo	 el	 contenido	 del	 del	 shadow	 DOM	 que	 se	 encuentra	
inmediatamente	 por	 debajo	 de	 él	 en	 la	 jerarquía	 de	 capas.	 Esta	 e1queta	 no	 dispone	 sin	
embargo	de	filtro	select.	
Distribución	De	Contenidos	En	La	Sombra	
<script>
...
root1.innerHTML = 'Esta capa está oculta';
root2.innerHTML = 'D. <content select…';
root3.innerHTML =
'<div class=".box">' +
' <shadow></shadow>' +
'</div>';
</script>
Las	 capas	 que	 no	 tuvieran	 una	
referencia	 <shadow>	 desde	 capas	
superiores	 no	 serían	 incluidas	 en	 el	
proceso	de	renderizado	
Existen	Capas	Ocultas
@javiervelezreye	28		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Renderizado.	HTML	Templates	
No	es	poco	frecuente	encontrar	situaciones	en	las	que	es	necesario	instanciar	dos	ocurrencias	
diferentes	 de	 un	 mismo	 componente	 sobre	 la	 misma	 página,	 aunque	 sea	 con	 light	 DOM	
diferentes.	¿Pomo	podemos	evitar	el	trabajo	de	reescribir	el	shadow	DOM	entero	para	cada	
instancia	de	forma	eficaz	y	segura?	
PlanRllas	Inertes	Y	AcRvación	De	Código	Por	Clonación	
Página	Huésped	
<div id=‘A-1’>
</div>
<div id=‘A-2’>
</div>
El	contenido	de	los	dos	subárboles	shadow	
es	el	mismo	puesto	que	ambas	eDquetas	
responden	 a	 instancias	 disDntas	 (-1	 y	 -2)	
del	mismo	componente	A		
Shadow	DOM	idénIcos	
Cada	 instancia	 sin	 embargo	 conDene	 unos	
contenidos	 semánDcos	 disDntos	 dentro	 del	
subárbol	 light	 que	 sirven	 para	 configurar	 la	
misma	de	forma	parDcular	
Light	DOM	diferentes
@javiervelezreye	29		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Renderizado.	HTML	Templates	
No	es	poco	frecuente	encontrar	situaciones	en	las	que	es	necesario	instanciar	dos	ocurrencias	
diferentes	 de	 un	 mismo	 componente	 sobre	 la	 misma	 página,	 aunque	 sea	 con	 light	 DOM	
diferentes.	¿Pomo	podemos	evitar	el	trabajo	de	reescribir	el	shadow	DOM	entero	para	cada	
instancia	de	forma	eficaz	y	segura?	
PlanRllas	Inertes	Y	AcRvación	De	Código	Por	Clonación	
<template id="news">
<img src="">
<div class="body"></div>
</template>
<div id="new-1"></div> <div id="new-2"></div>
<script>
function createNew(container, image, body) {
var root = document.querySelector(container).createShadowRoot();
var template = document.querySelection("#news").content;
template.querySelector("img").scr = image;
template.querySelector(".body").textContent = body;
root.appendChild(template.content.cloneNode(true));
}
createNew('#new-1', 'imagen1.png', 'noticia 1');
createNew('#new-2', 'imagen2.png', 'noticia 2');
</script>
El	 código	 de	 la	 planDlla	 se	 procesa	
pero	 la	 carga	 de	 recursos	 no	 se	
produce	hasta	la	acDvación	
PlanIlla	Inerte	
La	 acDvación	 de	 una	 planDlla	
consiste	 en	 un	 proceso	 de	 clonación	
del	 nodo	 DOM	 que	 manDene	 los	
contenidos	
AcIvación
@javiervelezreye	30		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Extensión.	Custom	Tags	
Ahora	que	tenemos	los	mecanismos	necesarios	para	definir	y	encapsular	comportamiento	y	
lógica	 de	 presentación	 personalizada	 necesitamos	 una	 manera	 de	 referirlo	 nominalmente	
dentro	de	nuestra	página	Web	en	forma	de	e1quetas	personalizadas.	Esto	permite	dis1nguir	
los	componentes	de	las	e1quetas	estándar	lo	que	aumenta	la	legibilidad	de	la	página.	
Creación	De	ERquetas	Personalizadas.	Custom	Tags	
Los	 nombres	 de	 las	 eDquetas	 personalizadas	 deben	
tener	 al	 menos	 un	 guión	 en	 el	 nodeName	 para	
diferenciarlas	de	las	eDquetas	estándar.	
Regla	1.	Nombres	con	al	menos	un	guión	
<wc-calendar> ... </wc-calendar>
No	 pueden	 uDlizarse	 como	 nombres	 de	 eDquetas	
personalizadas	cualquiera	de	las	cadenas	con	guión	que	
se	enumeran	a	conDnuación.	
Regla	2.	Nombres	reservados	
annotation-xml color-profile font-face
font-face-src font-face-uri font-face-format font-face-
name missing-glyph
...
<wc-calendar>
<wc-calendar-day>12</wc-calendar-day>
<wc-calendar-month>06</wc-calendar-month>
<wc-calendar-year>2014</wc-calendar-year>
</wc-calendar>
...
@javiervelezreye	31		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Extensión.	Custom	Tags	
Debemos	preocuparnos,	por	un	lado,	de	registrar	cada	componente	construido	como	un	nuevo	
1po	 de	 e1queta	 dentro	 del	 sistema	 de	 e1quetas	 del	 navegador	 y	 después	 de	 instanciar	
componentes	tanto	desde	el	lenguaje	de	marcado	como	a	través	de	JS.	
Creación	De	ERquetas	Personalizadas.	Custom	Tags	
var p = Object.create(HTMLElement.prototype);
p.foo = function (){...};
p.bar = 7;
var Foo = document.registerElement(
'wc-foo',
{prototype: p});
<wc-foo id="a">
...
</wc-foo>
<wc-foo id="b">
...
</wc-foo>
var a = new Foo ();
var b = document.createElement('wc-foo');
document.body.appendChild (a);
document.body.appendChild (b);
Registro	de	un	Componente	 Instanciación	de	un	Componente	
Primero	 se	 crea	 el	 protoDpo	 del	
componente	 y	 se	 registra	 como	 una	
nueva	 eDqueta	 con	 la	 función	
registerElement	
Creación	
Una	 vez	 creado	 el	 componente	 y	
registrado	como	una	nueva	eDqueta	
se	 puede	 usar	 como	 cualquier	 otra	
eDqueta	estándar	
Uso
@javiervelezreye	32		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Extensión.	Custom	Tags	
Es	 posible	 extender	 las	 propias	 e1quetas	 del	 estándar	 HTML	 para	 generar	 variantes	 que	
incluyan	nuevo	comportamiento	o	lógica	presentacional	cuando	se	rendericen.	Estas	e1quetas	
man1enen,	 naturalmente,	 el	 nombre	 de	 la	 e1queta	 a	 la	 que	 ex1enden	 pero	 incluyen	 un	
calificador	is	para	indicar	al	navegador	de	que	se	trata	de	una	variante	dis1nta.	
Extensión	de	ERquetas	Estándar.	Extended	Element	Types	
...
<button id="btn" is="fancy-button">
Ok
</button>
<p is="lorem-ipsum"><p>
...
<script>
var btn = document.querySelector(‘#btn’);
btn.addEventListener('click', function(e){
...
});
</script>
Las	 eDquetas	 del	 estándar	 se	 exDenden	 con	
variantes	 cualificadas	 nominalmente	 dentro	 del	
atributo	is.	Estas	eDquetas	manDenen	el	nombre,	
métodos	 y	 atributos	 de	 la	 eDqueta	 de	 la	 que	
derivan	 pero	 pueden	 sobrescribir	 o	 agregar	
nuevas	capacidades	
Extensión	de	EIquetas	Estándar	
La	 nueva	 variante	 de	 botón	 incluye,	 por	
herencia	 todos	 los	 atributos,	 métodos	 y	
modelo	 de	 eventos	 que	 Dene	 la	 eDqueta	
base	de	la	que	deriva	
Herencia	de	Capacidades
@javiervelezreye	33		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Extensión.	Custom	Tags	
De	forma	similar	al	caso	anterior,	comenzaremos	por	registrar	cada	componente	construido	
como	 una	 variante	 que	 ex1ende	 una	 e1queta	 del	 estándar	 y	 después	 nos	 ocuparemos	 de	
instanciar	componentes	tanto	desde	el	lenguaje	de	marcado	como	a	través	de	JS.	
Extensión	de	ERquetas	Estándar.	Extended	Element	Types	
var p = Object.create(HTMLButtonElement.prototype);
p.foo = function (){...};
p.bar = 7;
var FancyButton = document.registerElement(
'fancy-button',
{extends: 'button',
prototype: p});
<button is="fancy-button"
id="a"> Ok </button>
<button is="fancy-button"
id="b"> Ok </button>
var a = new FancyButton ();
var b = document.createElement
('fancy-button');
document.body.appendChild (a);
document.body.appendChild (b);
Registro	de	un	Componente	 Instanciación	de	un	Componente	
En	 este	 caso	 la	 creación	 requiere	
crear	 un	 protoDpo	 que	 hereda	 del	
protoDpo	HTMLBuionElement	
Creación	
A	diferencia	de	las	eDquetas	personalizadas,	aquí	se	
manDene	 el	 nombre	 de	 la	 eDqueta	 y	 se	 cualifica	
semánDcamente	con	el	atributo	is	para	favorecer	el	
descubrimiento	SEO	
Uso
@javiervelezreye	34		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Modularización.	HTML	Imports	
La	implementación	de	un	componente	incluye	un	código	de	plan1lla	inerte,	especificaciones	
de	es1lo	y	no	poca	lógica	de	scrip1ng	para	especificar	el	modelo	de	comportamiento.	Parece	
necesario	 disponer	 de	 un	 mecanismo	 de	 modularización	 que	 permita	 incluir	 todo	 ese	
contenido	en	un	fichero	de	índice	a	parte	HTML	que	pueda	importarte	a	la	página	huésped.		
Importación	de	documentos	HTML	
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<script src="webcomponents.js"></script>
<script src="polymer.js"></script>
<link rel="import" href="my-lib.html">
</head>
<body>
...
</body>
</html>
<!doctype html>
<html lang="es">
<head>
<link rel="import" href="tag-1.html">
<link rel="import" href="tag-2.html">
<link rel="stylesheet" href="style-1.html">
<link rel="stylesheet" href="style-2.html">
<script src="script-1.js"></script>
<script src="script-2.js"></script>
</head>
<body>
<!– codigo del componente -->
...
</body>
</html>
Index.html	 My-lib.html	
style-2.css	
	style-1.css	
script-2.js	
	script-1.js	
tag-2.html	
	tag-1.html
@javiervelezreye	35		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Modularización.	HTML	Imports	
La	implementación	de	un	componente	incluye	un	código	de	plan1lla	inerte,	especificaciones	
de	es1lo	y	no	poca	lógica	de	scrip1ng	para	especificar	el	modelo	de	comportamiento.	Parece	
necesario	 disponer	 de	 un	 mecanismo	 de	 modularización	 que	 permita	 incluir	 todo	 ese	
contenido	en	un	fichero	de	índice	a	parte	HTML	que	pueda	importarte	a	la	página	huésped.	
Acceso	al	Recurso	Importado	y	a	la	Página	Anfitriona	
<!doctype html>
<html lang="es">
<head>
...
<link rel="import" href="file.html">
</head>
<body>
...
</body>
</html>
<!doctype html>
<html lang="es">
...
<body>
<script>
var f = document.currentScript.ownerDocument;
var h = document;
// f refiere a este documento HTML
// h refiere a la página huésped
</script>
</body>
</html>
Index.html	 file.html	
I.	Contexto	de	Anfitrión	
El	 contexto	 en	 el	 que	 se	 evalúan	 los	
script	dentro	de	una	página	importada	
es	el	de	la	página	anfitriona	
II.	Evaluación	Secuencial	
Las	importaciones	son	no	bloqueantes.	Sin	
embargo	 los	 script	 dentro	 de	 la	 página	
importada	se	ejecutan	en	orden	
III.	Evaluación	Única		
Las	 importaciones	 desde	 una	 misma	
URL	son	procesadas	sólo	una	vez	con	lo	
que	sus	script	sólo	se	ejecutan	una	vez
@javiervelezreye	36		
Estándares	En	Componentes	Web	
El	Proyecto	Polymer	
Modelo	De	Modularización.	HTML	Imports	
Para	 controlar	 los	 procesos	 de	 carga	 de	
recursos	de	documentos	HTML	importados	
mediante	 la	 direc1va	 import	 se	 pueden	
inyectar	manejadores	a	eventos	de	éxito	y	
error.	
Eventos	de	Carga	y	Error	
<script async>
function handleLoad(e) {
console.log(‘Loaded import:’ + e.target.href);
}
function handleError(e) {
console.log(‘Error loading import:’ + e.target.href);
}
</script>
<link rel=“import” href=“file.html”
onload=“handleLoad(event)” onerror=“handleError(event)”>
<head>
<link id=“foo-link” rel=“import” href=“wc-foo.html”>
</head>
<body>
...
<script>
var link = document.querySelector(‘#foo-link’);
var content = link.import;
var el = content.querySelector(‘...’);
...
</script>
</body>
El	 desarrollador	 1ene	 la	 oportunidad	 de	 capturar	
programá1camente	 el	 contenido	 importado	
mediante	una	direc1va	import	y	operar	sobre	él	a	
conveniencia.	
Manipulación	De	Contenidos
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
3	El	Framework	
Polymer	
§  Modelo	de	Componentes	Polymer	
§  Extensiones	al	Modelo	de	Plan1llas	
§  Extensiones	al	Modelo	de	Componente	
Introducción	
El	Proyecto	Polymer
@javiervelezreye		38		
El	Framework	Polymer	
El	Proyecto	Polymer	
El	Framework	Polymer	
	 Google	 ha	 desarrollado,	 por	 encima	 de	 la	 implementación	 de	 los	
estándares	de	Componentes	Web,	un	framework	dirigido	a	simplificar	
los	 procesos	 de	 desarrollo	 con	 esta	 tecnología.	 A	 lo	 largo	 de	 este	
capítulo	veremos	cuales	son	sus	ventajas	par1culares.	
HTML	Templates	
Ofrece	un	modelo	de	construcción	basado	
en	 planDllas	 inertes	 de	 código	 HTML	 que	
sólo	 son	 acDvadas	 cuando	 se	 renderiza	 el	
componente	
Custom	Elements	
Ofrece	 un	 modelo	 de	 extensibilidad	 que	
permite	 a	 los	 desarrolladores	 definir	 sus	
p r o p i a s	 e D q u e t a s	 o	 r e d e fi n i r	
semánDcamente	las	eDquetas	del	estándar	
DOM	
Modelo	de	Componente	
Polymer	
Data	Binding	
Plan1llas	Dinámicas	
Atributos	
Ciclo	de	Vida	
Observers
@javiervelezreye	39		
El	Framework	Polymer	
El	Proyecto	Polymer	
Modelo	De	Componentes	De	Polymer	
La	definición	de	Componentes	Web	sin	lógica	funcional	
con	Polymer	es	un	ejercicio	completamente	declara1vo	
mediante	la	e1queta	polymer-element	y	el	modificador	
noscript.	
Componentes	Web	Sin	Lógica	
<script>
var host = document.querySelector('#myHost');
var root = host.createShadowRoot();
root.innerHTML = "contenido del Shadow DOM";
</script>
Polymer	
Web	Components	
<polymer-element name="profile-card" noscript>
<template>
...
</template>
</polymer-element>
El	atributo	noscript	incluye	una	lógica	
de	 configuración	 por	 defecto	 para	 los	
compo-nentes	sin	lógica	funcional
@javiervelezreye	40		
El	Framework	Polymer	
El	Proyecto	Polymer	
Modelo	De	Componentes	De	Polymer	
Cuando	el	componente	1ene	lógica	funcional	se	añade	
un	script	que	se	vincula	automá1camente	a	la	plan1lla	
HTML	adjunta	sin	u1lizar	el	atributo	noscript.	
Componentes	Web	Con	Lógica	
<script>
var host = document.querySelector('#myHost');
var root = host.createShadowRoot();
root.innerHTML = "contenido del Shadow DOM";
</script>
Polymer	
Web	Components	
<polymer-element name="profile-card">
<template>
...
</template>
<script>
...
</script>
</polymer-element>
Los	componentes	con	lógica	funcional	
añaden	una	eDqueta	script	que	opera	
sobre	 los	 contenidos	 de	 la	 planDlla	
adjunta
@javiervelezreye	41		
El	Framework	Polymer	
El	Proyecto	Polymer	
Modelo	De	Componentes	De	Polymer	
Para	 definir	 un	 Componente	 Web	 como	 extensión	 de	
otro	componente	o	de	una	e1queta	estándar	basta	con	
usar	el	par	de	atributos	extends	/	is.	
Extensión	De	Componentes	Web	
var p = Object.create(HTMLButtonElement.prototype);
var FancyButton = document.registerElement(
'fancy-button',
{extends: 'button', prototype: p});
Polymer	
Web	Components	
<polymer-element name="fancy-button" extends="button">
...
</polymer-element>
<button is="fancy-button"> ... </button>
Para	 declarar	 un	 componente	 como	
extensión	de	otro	se	uDliza	el	atributo	
extends	en	la	definición	del	mismo	
Después	 para	 su	 uso	 se	 uDliza	 la	
eDqueta	 del	 padre	 y	 se	 cualifica	
semánDcamente	al	componente	con	el	
atributo	is
@javiervelezreye	42		
El	Framework	Polymer	
El	Proyecto	Polymer	
Extensiones	Al	Modelo	De	Custom	Elements	
La	 lógica	 de	 comportamiento	 del	 componente	 incluye	
un	modelo	de	datos,	un	conjunto	de	métodos	de	ciclo	
de	vida	y	un	manejador	de	cambios	de	los	atributos.	
Atributos	&	Ciclo	de	Vida	
<polymer-element name="wc-card" attributes="name age">
...
<script>
Polymer ('wc-card', {
this.name,
this.age: 18,
created : function () {},
ready : function () {},
attacched : function () {},
domReady : function () {},
detached : function () {},
...
</script>
</polymer-element>
El	 modelo	 de	 datos	 se	 soporta	 a	
parDr	de	la	declaración	de	variables	
locales.	 Ojo	 los	 Dpos	 primiDvos	
operan	a	nivel	de	instancia	mientras	
que	los	objetos	a	nivel	de	protoDpo	
Los	 manejadores	 del	 ciclo	 de	
vida	 permiten	 incluir	 código	
que	 trata	 los	 eventos	
vinculados	 a	 la	 creación	 y	
destrucción	de	la	instancia
@javiervelezreye	43		
El	Framework	Polymer	
El	Proyecto	Polymer	
Extensiones	Al	Modelo	De	Custom	Elements	
La	 lógica	 de	 comportamiento	 del	 componente	 incluye	
un	modelo	de	datos,	un	conjunto	de	métodos	de	ciclo	
de	vida	y	un	manejador	de	cambios	de	los	atributos.	
Métodos	&	Observadores	
<polymer-element name="wc-card" attributes="name age">
...
<script>
...
adult : function (){ return this.age > 18 },
name : function (name){ ... },
age : function (age){ ... },
attributeChanged : function (att, ov, nv){},
nameChanged : function (ovalue, nvalue){},
ageChanged : function (ovalue, nvalue){}
});
</script>
</polymer-element>
Existen	dos	formas	para	gesDonar	el	
cambio	de	valor	de	los	atributos.	Se	
puede	 usar	 el	 método	 genéDco	
aiributeChanged	o	definir	maneja-
dores	de	cambio	dedicados	
Los	 métodos	 de	 negocio	 se	
incluyen	 tal	 cual	 al	 protoDpo	
del	componente	definido
@javiervelezreye	44		
El	Framework	Polymer	
El	Proyecto	Polymer	
Extensiones	Al	Modelo	De	PlanRllas	
Polymer	 vincula	 cada	 referencia	 en	 el	
contenido	de	las	plan1llas	HTML	al	modelo	de	
datos	subyacente	de	manera	que	los	cambios	
se	propagan	automá1camente.		
Data	Binding	Bidireccional	
<polymer-element name="wc-card" attributes="name age">
<template>
Hola, mi nombre es {{ name }}
y tengo {{ age }} años
</template>
<script>
Polymer ('wc-card') {
this.name,
this.age: 18,
...
}
</script>
</polymer-element>
Los	valores	de	los	atributos	del	
modelo	de	datos	se	propagan	a	
la	vista	de	manera	automáDca	
Asimismo,	las	referencias	sobre	elementos	de	
edición	 HTML	 que	 causan	 cambios	 en	 los	
atributos	 provocan	 actualizaciones	 en	 el	
modelo	subyacente.		
<polymer-element name="wc-card" attributes="name age">
<template>
Hola, mi nombre es {{ name }}
y tengo {{ age }} años
</template>
<script>
Polymer ('wc-card') {
this.name,
this.age: 18,
...
}
</script>
</polymer-element>
Recíprocamente	 los	 cambios	
sobre	 los	 atributos	 que	 se	
producen	 sobre	 la	 vista	
a c t u a l i z a n	 e l	 m o d e l o	
subyacente
@javiervelezreye	45		
El	Framework	Polymer	
El	Proyecto	Polymer	
Extensiones	Al	Modelo	De	PlanRllas	
Polymer	ex1ende	la	e1queta	template	para	dotarla	de	
capacidades	 de	 renderizado	 dinámico.	 A	 con1nuación	
describimos	las	principales	capacidades.	
PlanRllas	Dinámicas	
Enlace	a	Texto	
<p>{{user.name}}</p>
Enlace	a	Atributo	
<img src="{{image}}" alt="imagen">
Manejador	de	Evento	Estándar	
<button on-click="{{doClick}}">
Ok
</button>
Enlace	a	Atributo	Condicional	
<div class="card" hidden?="{{show}}"
Manejador	de	Evento	de	Negocio	
<div id="my-component"
on-done="{{doAlarm}}">
...
</div>
Enlace	con	Operador	Condicional	
<template repeat="{{item, i in items}}">
<div class="{{(i%2==0)? 'on' : 'off'}}">
{{item}}
</div>
</template>
@javiervelezreye	46		
El	Framework	Polymer	
El	Proyecto	Polymer	
Extensiones	Al	Modelo	De	PlanRllas	
Polymer	ex1ende	la	e1queta	template	para	dotarla	de	
capacidades	 de	 renderizado	 dinámico.	 A	 con1nuación	
describimos	las	principales	capacidades.	
PlanRllas	Dinámicas	
PlanIlla	de	Enlace	de	Datos	
<template bind="{{person as me}}">
{{me.name}} – {{me.twitter}}
</template>
PlanIlla	Condicional	
<template bind="..." if="truthy">
{{me.name}} – {{me.twitter}}
</template>
PlanIlla	IteraIva	
<template repeat="{{item in items}}">
<li>{{item}}</li>
</template>
PlanIllas	Referidas	&	Anidadas	
<template repeat="i in items" id="t">
<li>{{i}}
<ul>
<template repeat="{{i.hijos}}" ref="t">
</template>
</ul>
</template>
...
<template bind ref="t">
</template>
PlanIllas	Anidada	
<template repeat="{{u in users}}">
<template repeat="{{i in u.items}}">
<li>{{i}}</li>
</template
</template>
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
4	Ecosistema	de	
Componentes	de	
Polymer	
§  Componentes	Web	De	Polymer	
§  Core	Elements	
§  Paper	Elements	
§  Desarrollo	de	Aplica1vos	Basados	en	Componentes	
Introducción	
El	Proyecto	Polymer
@javiervelezreye		48		
Ecosistema	de	Componentes	de	Polymer	
El	Proyecto	Polymer	
Componentes	Web	De	Polymer	
	 Google	 ha	 desarrollado,	 por	 encima	 de	 la	 implementación	 de	 los	
estándares	de	Componentes	Web,	un	framework	dirigido	a	simplificar	
los	 procesos	 de	 desarrollo	 con	 esta	 tecnología.	 A	 lo	 largo	 de	 este	
capítulo	veremos	cuales	son	sus	ventajas	par1culares.	
Core	Elements	
Los	componentes	core-element	de	Polymer	
dan	 soporte	 a	 capacidades	 nucleares	
relacionadas	con	la	gesDón	de	la	lógica	de	
presentación	de	componentes	Web	
Paper	Elements	
Los	 componentes	 paper-element	 de	
Polymer	se	encargan	de	arDcular	el	modelo	
de	presentación	basado	en	Material	Design	
propio	de	Google
@javiervelezreye		49		
Ecosistema	de	Componentes	de	Polymer	
El	Proyecto	Polymer	
Core	Elements	
	
Con	 Polymer	 es	 posible	 crear	 aplicaciones	 por	
composición	de	componentes	Web.	Core	header	
panel	es		un	contenedor	simple	con	una	sección	
de	cabecera	y	otra	de	contenido.	
Core	Header	Panel	
Core	Drawer	Panel	
El	 componente	 core-header-panel	 es	 un	
contenedor	 responsive	 que	 combina	 un	 menú	
lateral	 deslizante	 	 con	 un	 área	 de	 contenido	
principal.	
<core-header-panel mode="scroll" flex>
<core-toolbar>
<core-icon-button icon="menu">
</core-icon-button>
<div>MY APP</div>
</core-toolbar>
<div class="content">...</div>
</core-header-panel>
MY APP
<core-drawer-panel>
<div drawer> Drawer panel... </div>
<div main> Main panel... </div>
</core-drawer-panel>
@javiervelezreye		50		
Ecosistema	de	Componentes	de	Polymer	
El	Proyecto	Polymer	
Paper	Elements	
	
Polymer	 también	 ofrece	 una	 amplia	 librería	 de	
componentes	 que	 implementan	 las	 normas	 de	
es1lo	de	Material	Design.	Paper-checkbox	es	un	
ejemplo	de	ello.	
Paper	Checkbox	
Paper	Input	
Paper-input	es	un	componente	que	sus1tuye	a	la	
e1queta	estándar	input	de	HTML	ofreciendo	un	
comportamiento	más	dinámico	y	mayor	riqueza	
en	la	experiencia	de	usuario.	
<paper-checkbox>
...
</paper-checkbox>
<paper-input label="Nombre">
...
</paper-input>
@javiervelezreye		51		
Ecosistema	de	Componentes	de	Polymer	
El	Proyecto	Polymer	
Desarrollo	de	AplicaRvos	Basados	en	Componentes	
	
Parámetros de
configuración
wc-bus	
<Timeline <zoom >next >previous >go
>zoom-in >zoom-out
zoom-in,
zoom-out,
go
go
zoom-in,
zoom-out
wc-slides	wc-video	
wc-speech	
El	desarrollo	de	aplicaciones	orientadas	a	Componentes	Web	requiere	de	cierta	infraestructura	
de	 control	 dedicada	 a	 ar1cular	 procesos	 de	 coordinación	 y	 orquestación	 entre	 los	
componentes	 cons1tuyentes.	 Esta	 lógica	 puede	 encapsularse	 en	 componentes	 de	 control	
reu1lizables.	Veamos	un	ejemplo.
@javiervelezreye		52		
Preguntas	
El	Proyecto	Polymer	
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
El	Framework	
Polymer	Estándares	de	
Componentes	Web	
El	Ecosistema	de	
Componentes
Javier	Vélez	Reyes	
	@javiervelezreye	
Javier.velez.reyes@gmail.com	
El	Proyecto	Polymer	
Programación	Orientada	a	
Componentes	Web	
Febrero	2015

Más contenido relacionado

La actualidad más candente

El futuro es hoy. Del Nomadismo al Capitalismo Web
El futuro es hoy. Del Nomadismo al Capitalismo WebEl futuro es hoy. Del Nomadismo al Capitalismo Web
El futuro es hoy. Del Nomadismo al Capitalismo WebJavier Vélez Reyes
 
Arquitecturas Adaptativas de Componentes Web
Arquitecturas Adaptativas de Componentes WebArquitecturas Adaptativas de Componentes Web
Arquitecturas Adaptativas de Componentes WebJavier Vélez Reyes
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosJavier Vélez Reyes
 
Modelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosModelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosJavier Vélez Reyes
 
Arquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaArquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaJavier Vélez Reyes
 
Cometatech Smile Group
Cometatech Smile GroupCometatech Smile Group
Cometatech Smile GroupASOLIF
 

La actualidad más candente (9)

El futuro es hoy. Del Nomadismo al Capitalismo Web
El futuro es hoy. Del Nomadismo al Capitalismo WebEl futuro es hoy. Del Nomadismo al Capitalismo Web
El futuro es hoy. Del Nomadismo al Capitalismo Web
 
Arquitecturas Adaptativas de Componentes Web
Arquitecturas Adaptativas de Componentes WebArquitecturas Adaptativas de Componentes Web
Arquitecturas Adaptativas de Componentes Web
 
Web components
Web componentsWeb components
Web components
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de Datos
 
Modelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de ServiciosModelos de API Para El Diseño de Servicios
Modelos de API Para El Diseño de Servicios
 
Arquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la ExperienciaArquitecturas Dirigidas por la Experiencia
Arquitecturas Dirigidas por la Experiencia
 
Lenguaje unificado
Lenguaje unificadoLenguaje unificado
Lenguaje unificado
 
Trabajo gru
Trabajo gruTrabajo gru
Trabajo gru
 
Cometatech Smile Group
Cometatech Smile GroupCometatech Smile Group
Cometatech Smile Group
 

Destacado

Taller de Programación Funcional en JavaScript
Taller de Programación Funcional en JavaScriptTaller de Programación Funcional en JavaScript
Taller de Programación Funcional en JavaScriptJavier Vélez Reyes
 
Programación Asíncrona en Node JS
Programación Asíncrona en Node JSProgramación Asíncrona en Node JS
Programación Asíncrona en Node JSJavier Vélez Reyes
 
4/9 Curso JEE5, Soa, Web Services, ESB y XML
4/9 Curso JEE5, Soa, Web Services, ESB y XML4/9 Curso JEE5, Soa, Web Services, ESB y XML
4/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
Ebe2013: productividad conherramientas en la nube
Ebe2013: productividad conherramientas en la nubeEbe2013: productividad conherramientas en la nube
Ebe2013: productividad conherramientas en la nubeJuan Carlos Rubio Pineda
 
8/9 Curso JEE5, Soa, Web Services, ESB y XML
8/9 Curso JEE5, Soa, Web Services, ESB y XML8/9 Curso JEE5, Soa, Web Services, ESB y XML
8/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
144 Rest Web Services
144 Rest Web Services144 Rest Web Services
144 Rest Web ServicesGeneXus
 
Curso de javascript y node avanzado
Curso de javascript y node avanzadoCurso de javascript y node avanzado
Curso de javascript y node avanzadobrainybogota
 
Curso node.js
Curso node.js Curso node.js
Curso node.js Redradix
 
Metaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptMetaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptJavier Vélez Reyes
 

Destacado (20)

Procesadores de Lenguajes II
Procesadores de Lenguajes IIProcesadores de Lenguajes II
Procesadores de Lenguajes II
 
Procesadores de Lenguajes I
Procesadores de Lenguajes IProcesadores de Lenguajes I
Procesadores de Lenguajes I
 
Taller de Programación Funcional en JavaScript
Taller de Programación Funcional en JavaScriptTaller de Programación Funcional en JavaScript
Taller de Programación Funcional en JavaScript
 
Programación Asíncrona en Node JS
Programación Asíncrona en Node JSProgramación Asíncrona en Node JS
Programación Asíncrona en Node JS
 
4/9 Curso JEE5, Soa, Web Services, ESB y XML
4/9 Curso JEE5, Soa, Web Services, ESB y XML4/9 Curso JEE5, Soa, Web Services, ESB y XML
4/9 Curso JEE5, Soa, Web Services, ESB y XML
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML
 
Ebe2013: productividad conherramientas en la nube
Ebe2013: productividad conherramientas en la nubeEbe2013: productividad conherramientas en la nube
Ebe2013: productividad conherramientas en la nube
 
Introduccion Servicios Web
Introduccion Servicios WebIntroduccion Servicios Web
Introduccion Servicios Web
 
8/9 Curso JEE5, Soa, Web Services, ESB y XML
8/9 Curso JEE5, Soa, Web Services, ESB y XML8/9 Curso JEE5, Soa, Web Services, ESB y XML
8/9 Curso JEE5, Soa, Web Services, ESB y XML
 
Servicios web xml
Servicios web xmlServicios web xml
Servicios web xml
 
SOA y Web Services
SOA y Web ServicesSOA y Web Services
SOA y Web Services
 
7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML7/9 Curso JEE5, Soa, Web Services, ESB y XML
7/9 Curso JEE5, Soa, Web Services, ESB y XML
 
3/9 soa y web services
3/9 soa y web services3/9 soa y web services
3/9 soa y web services
 
144 Rest Web Services
144 Rest Web Services144 Rest Web Services
144 Rest Web Services
 
Web services
Web servicesWeb services
Web services
 
Curso de javascript y node avanzado
Curso de javascript y node avanzadoCurso de javascript y node avanzado
Curso de javascript y node avanzado
 
Curso node.js
Curso node.js Curso node.js
Curso node.js
 
Servidor API REST con Node.js
Servidor API REST con Node.jsServidor API REST con Node.js
Servidor API REST con Node.js
 
Metaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScriptMetaprogramación Compositiva en JavaScript
Metaprogramación Compositiva en JavaScript
 
Introducción a Xamarin
Introducción a XamarinIntroducción a Xamarin
Introducción a Xamarin
 

Similar a El Proyecto Polymer (20)

Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Presentación1
Presentación1Presentación1
Presentación1
 
Que es la web 2.0
Que es la web 2.0Que es la web 2.0
Que es la web 2.0
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Trabajo de sistemas web 2.0
Trabajo de sistemas web 2.0Trabajo de sistemas web 2.0
Trabajo de sistemas web 2.0
 
Web 2
Web 2Web 2
Web 2
 
Informe Proyecto Web 2.0 - Blog Fisiologia
Informe Proyecto Web 2.0 - Blog FisiologiaInforme Proyecto Web 2.0 - Blog Fisiologia
Informe Proyecto Web 2.0 - Blog Fisiologia
 
Trabaj0 Web 2.0
Trabaj0 Web 2.0Trabaj0 Web 2.0
Trabaj0 Web 2.0
 
Trabaj0 Web 2
Trabaj0 Web 2Trabaj0 Web 2
Trabaj0 Web 2
 
Zuldery holguin mejia 10 3
Zuldery holguin mejia 10  3Zuldery holguin mejia 10  3
Zuldery holguin mejia 10 3
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Tp Tics Hypertexto
Tp Tics HypertextoTp Tics Hypertexto
Tp Tics Hypertexto
 
La web 2.0 nilver
La web 2.0 nilverLa web 2.0 nilver
La web 2.0 nilver
 
Web2 y nube
Web2 y nubeWeb2 y nube
Web2 y nube
 
web 2.0
web 2.0web 2.0
web 2.0
 
Qué es la web 2
Qué es la web 2Qué es la web 2
Qué es la web 2
 
Web2.0
Web2.0Web2.0
Web2.0
 
Trabajo de sistemas web 2.0
Trabajo de sistemas web 2.0Trabajo de sistemas web 2.0
Trabajo de sistemas web 2.0
 

El Proyecto Polymer