SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
El universo JavaScript en D8
Ramon Vilar
Sobre mi
Ramon Vilar
ramon@ymbra.com
@rvilar
Drupal Day 2011
Índice
01. D8 y JavaScript
02. El objeto JS global Drupal
03. Otras APIs del core
04. Añadir JS a nuestros módulos y temas
05. Buenas prácticas en desarrollo JS
06. Conclusiones
D8 Y JAVASCRIPT
Drupal 8 y JavaScript
● En esta nueva versión, la importáncia de JS ha crecido y
mucho.
● Inclusión de librerías muy importantes y que cambian la forma
de trabajar con JS
– Ckeditor en el núcleo
– Backbone, underscore, ...
● Librerías ya existentes a nuevas versiones:
– jQuery 2.0.3, jQuery.UI 1.10.2, jQuery Once 1.2.3, ...
Estrictos con la calidad de código
“use strict” - http://ves.cat/kMMq
Nueva característica de ECMAScript 5 para pasar a ejecutar código
en modo estricto. Se debe añadir la cadena cómo primera línia
dentro en el contexto de la función.
JSHint – http://jshint.com
Herramienta de control de calidad del código JS que escribimos.
Integrado para revisar todo el código del núcleo. Ver .jshintrc y
.jshintignore
Ayuda a aplicaciones livianas
domReady
● Cada petición a Drupal, carga drupal.js, fichero dónde
carga toda la funcionalidad JS de Drupal.
● Este fichero sólo usaba jQuery para hacer:
$(window).ready(function() {...});
● Para hacer esto no hace falta cargar jQuery entero (90kb) y
podemos usar domReady (740 bytes).
domready(function () {...});
Backbone & Underscore
● La complejidad de las aplicaciones JS hace que se requiera un
framework MVC para poder arquitecturizarla
● Hoy en día existen múltiples que estan de moda: Backbone,
Angular.js o Ember.js
● La comunidad se ha decidido por Backbone porque es la que
tiene la mayor comunidad de usuarios y la más estable.
● Podeis ver ejemplos de uso en los módulos del core Edit,
Toolbar o Contextual
● Underscore se incluye porque es requisito de Backbone, però
también podemos aprovecharnos de ellos.
HTML5 y RWD
● Drupal 8 está desarrollado en HTML5 y es mobile friendly
● Para ello usa algunas librerías de apoyo, cómo son
Picturefill, classList o HTML5Shiv (*)
● Usa otras librerías interesantes cómo Modernizr que
podemos usar en nuestros desarrollos.
(*) HTML5Shiv va a desaparecer en breve porque el core no da
soporte a IE8 http://ves.cat/kOor
EL OBJETO JS GLOBAL Drupal
El objeto JS global Drupal
● La gente sigue sin conocer un objeto clave en el
desarrollo Drupal: Drupal
/core/misc/drupal.js
● A tener en cuenta:
– Drupal.behaviors
– Drupal.theme
– Drupal.t
– ...
Drupal.behaviors
● Es la forma de añadir comportamiento a una
página o a un elemento:
Drupal.behaviors.myModuleBehavior = {
attach: function (context, settings) {
$('.select').addClass('foo');
}
};
● Nos aporta funciones de attach y detach. Se llama en
cada petición de la página (ajax)
● Si nos interesa que sólo se llame una vez: once().
Drupal.theme
● El theming también llegó al JS.
● Ha cambiado un poco en D8 (no usamos prototype)
● Todo HTML añadido a la página se debería hacer
mediante una función de theming
Drupal.theme.placeholder = function (str) {
return '<em class="placeholder">' +
Drupal.checkPlain(str) + '</em>';
};
// Calling a theme function.
Drupal.theme('placeholder', bar);
Drupal.t
● Drupal.t() funciona exactamente igual que el método
$this->t() (en D8 es un servicio y no una función
procedural)
Drupal.t(“Path: !uri”, {'!uri', uri});
● Las variables se pueden pasar con @, ! y %; con el mismo
significado que en PHP.
Drupal.checkPlain
OTRAS NUEVAS APIS
Otras nuevas APIs (I)
Drupal.announce
Envia notificaciones al usuario para informar de cambios en la
página que no se pueden describir con estados ARIA.
Drupal.debounce
Limita la invocación de una función en un periodo de tiempo.
Drupal.tabbingManager
También ligado a la accesibilidad del sitio. Controla el orden y las
acciones a ejecutar en el tabbing de elementos.
Otras nuevas APIs (y II)
Drupal.displace
Calcula distancias de offset de viewport. Resuelve el problema de
posicionamiento entre Overlay y el Toolbar
Drupal.dialog
API que simula el elemento dialog de HTML5.
Drupal.history
Gestiona el historial de navegación
AÑADIR JS A NUESTROS MÓDULOS
Y TEMAS
Añadir JS a nuestro módulo
● En Drupal 7 podíamos usar, entre otros:
drupal_add_js('js/mymodule.js');
scripts[] = 'js/mymodule.js';
● Esto en Drupal 8 no se puede usar.
● Ahora se nos obliga a definir todos nuestros ficheros JS cómo
librerías.
hook_library_info()
mymodule.libraries.yml
foo:
version: 1.0
js:
script.js: {}
dependencies:
- core/jquery
- core/drupal
- core/drupalSettings
- core/jquery.once
Añadir JS a nuestro módulo (III)
● En el módulo, lo añadiremos al render array de nuestro elemento:
$my_render['#attached']['library'][] =
'mymodule/foo';
● Si queremos añadirlo en todas las páginas, podremos usar
hook_page_build()
function edit_page_build(&$page) {
if(!Drupal::currentUser()->hasPermission('...')) {
return;
}
// some code
$page['#attached']['library'][] = 'edit/edit';
}
Añadir JS a nuestro tema
● Ahora todos los scripts tienen que declarar sus dependencias
en ficheros de librerías mytheme.libraries.yml
● Para añadirlos a nuestros temas:
…
core: 8.x
libraries:
- bartik/base
ckeditor_stylesheets:
- css/ckeditor-iframe.css
…
Pasar datos de PHP a JS
● Tampoco podemos usar drupal_add_js()
$form['#attached']['js'][] = array(
'type' => 'setting',
'data' => array('blockPlacement' =>
$placement),
);
● Para usar ese dato en nuestro JS:
Drupal.settings.blockPlacement
drupalSettings.blockPlacement
● drupalSettings es una variable global
intencionada.
BUENAS PRÁCTICAS EN
DESARROLLO JS
Buenas prácticas en desarrollo JS (I)
● Usar siempre el modo estricto: “use strict”;
● JSHint está ahí para ayudarnos. Usémoslo!
● Usa Firebug o alguno de sus primos!
● Sobretodo, acordaos de declarar “todas” las variables! Es
buena práctica hacerlo siempre al inicio de la función
● Funciones anónimas para evitar problemas de scope de
variables y funciones.
● Perdamos el miedo a crear nuestras própias librerías o plugins.
Buenas práctica en desarrollo JS (y II)
● Hay que ir con cuidado con los selectores JS que
se escriben. Puede ser un foco de problemas de
performance http://ves.cat/kRFb
● Si nuestro JS toma cierta notoriedad, no tengamos
miedo de crear nuestro própio plugin jQuery,
nuestro componente en Backbone o nuestra
própia librería JS.
Desarrollo de plugins jQuery
● Si un componente jQuery asociado tiende a ser
reutilizable o tiene cierta notoriedad, escribamos un
plugin jQuery.
$.fn.myPlugin = function() {
// My code.
return this;
};
$(“input”).myPlugin();
● http://learn.jquery.com/plugins/
Desarrollo de bibliotecas JS
● Si nuestra lógica se vuelve extensa y compleja, sería bueno crear nuestra
própia biblioteca JS, encapsulando lo que nos interesa (¡podemos usar
Backbone que para eso está!).
var MyModule = {
init: function(options) {
// do my stuff.
},
_myprivatefunction(): function {
// other stuff.
}
};
MyModule.init(current_options);
Conclusiones
● Muchas novedades en D8 en materia de JS. Ahora es
tiempo de ponerlas en práctica!
● Muchas nuevas APIs que nos pueden ayudar
● Cuidado con las librerías JS que añadimos a nuestros
proyectos. A veces es mejor picar algo a mano que
empezar a añadir cosas descargadas de Internet.
● Debemos perder el miedo a hacer nuestras librerías y
plugins. Es buena práctica!
Contacto
● Twitter: @rvilar
● Correo: ramon@ymbra.com
● Web: http://ymbra.com
● Grácias a todos(as) ¿Preguntas?

Más contenido relacionado

La actualidad más candente

Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)
Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)
Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)sheriframadan18
 
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)Ander Martinez
 
Oracle RAD stack REST, APEX, Database
Oracle RAD stack REST, APEX, DatabaseOracle RAD stack REST, APEX, Database
Oracle RAD stack REST, APEX, DatabaseMichael Hichwa
 
Oracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxOracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxVenu Palakolanu
 
Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)magupta26
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentationritika1
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenMT AG
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)Ander Martinez
 
UDA-Anexo gestión de seguridad
UDA-Anexo gestión de seguridadUDA-Anexo gestión de seguridad
UDA-Anexo gestión de seguridadAnder Martinez
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackAnder Martinez
 
The Odoo JS Framework
The Odoo JS FrameworkThe Odoo JS Framework
The Odoo JS FrameworkOdoo
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 
Making Sense of APEX Security by Christoph Ruepprich
Making Sense of APEX Security by Christoph RuepprichMaking Sense of APEX Security by Christoph Ruepprich
Making Sense of APEX Security by Christoph RuepprichEnkitec
 
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイドOracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイドオラクルエンジニア通信
 
UDA-Guia de desarrollo
UDA-Guia de desarrolloUDA-Guia de desarrollo
UDA-Guia de desarrolloAnder Martinez
 

La actualidad más candente (20)

Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)
Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)
Step-by-Step: APEX Installation on Tomcat (Windows Server 2016)
 
OPM API reference guide
OPM API reference guideOPM API reference guide
OPM API reference guide
 
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
UDA-Componentes RUP. Tabla (v2.1.1 deprecado)
 
Oracle RAD stack REST, APEX, Database
Oracle RAD stack REST, APEX, DatabaseOracle RAD stack REST, APEX, Database
Oracle RAD stack REST, APEX, Database
 
Oracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linuxOracle forms and reports 11g installation on linux
Oracle forms and reports 11g installation on linux
 
Webpack slides
Webpack slidesWebpack slides
Webpack slides
 
Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)Oracle Forms Tutorial (www.aboutoracleapps.com)
Oracle Forms Tutorial (www.aboutoracleapps.com)
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisieren
 
NEXT.JS
NEXT.JSNEXT.JS
NEXT.JS
 
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)UDA-Componentes RUP. Mantenimiento  (v2.1.1 deprecado)
UDA-Componentes RUP. Mantenimiento (v2.1.1 deprecado)
 
UDA-Anexo gestión de seguridad
UDA-Anexo gestión de seguridadUDA-Anexo gestión de seguridad
UDA-Anexo gestión de seguridad
 
UDA-Componentes RUP. Feedback
UDA-Componentes RUP. FeedbackUDA-Componentes RUP. Feedback
UDA-Componentes RUP. Feedback
 
Presentation1.pptx
Presentation1.pptxPresentation1.pptx
Presentation1.pptx
 
The Odoo JS Framework
The Odoo JS FrameworkThe Odoo JS Framework
The Odoo JS Framework
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
Making Sense of APEX Security by Christoph Ruepprich
Making Sense of APEX Security by Christoph RuepprichMaking Sense of APEX Security by Christoph Ruepprich
Making Sense of APEX Security by Christoph Ruepprich
 
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイドOracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
Oracle Data Integrator R12.2.1.1 Studio及びRepositoryセットアップガイド
 
UDA-Guia de desarrollo
UDA-Guia de desarrolloUDA-Guia de desarrollo
UDA-Guia de desarrollo
 
React js
React jsReact js
React js
 

Destacado

El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7Ymbra
 
Drupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case StudyDrupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case Studyhernanibf
 
One Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp LondonOne Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp Londonhernanibf
 
Intro to drupal
Intro to drupalIntro to drupal
Intro to drupalhernanibf
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesAlberto Permuy Leal
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Alberto Permuy Leal
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galAlberto Permuy Leal
 
Drupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon BarcelonaDrupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon Barcelonahernanibf
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAngela Byron
 
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesManual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesBrox Technology
 
Elaboració del whisky de malta
Elaboració del whisky de maltaElaboració del whisky de malta
Elaboració del whisky de maltaJoan Mitjavila
 
Correo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoCorreo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoElena Moreno
 
Ice Presentacio
Ice PresentacioIce Presentacio
Ice Presentacioaaupcfira
 
iPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im VertriebiPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im Vertriebexcelsis
 
BAU International Executive MBA Webinar
BAU International Executive MBA WebinarBAU International Executive MBA Webinar
BAU International Executive MBA Webinarbauinternational
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevWerner Keil
 
Biologie de synthèse
Biologie de synthèseBiologie de synthèse
Biologie de synthèseGreenFacts
 

Destacado (20)

El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7
 
Drupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case StudyDrupal Performance - SerBenfiquista.com Case Study
Drupal Performance - SerBenfiquista.com Case Study
 
One Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp LondonOne Drupal to rule them all - Drupalcamp London
One Drupal to rule them all - Drupalcamp London
 
Intro to drupal
Intro to drupalIntro to drupal
Intro to drupal
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidades
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.gal
 
Drupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon BarcelonaDrupal architectures for flexible content - Drupalcon Barcelona
Drupal architectures for flexible content - Drupalcon Barcelona
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTO
 
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los AndesManual de instalación drupal 7.2 mejorado Universidad de Los Andes
Manual de instalación drupal 7.2 mejorado Universidad de Los Andes
 
Elaboració del whisky de malta
Elaboració del whisky de maltaElaboració del whisky de malta
Elaboració del whisky de malta
 
Correo institucional_Escuela de Verano
Correo institucional_Escuela de VeranoCorreo institucional_Escuela de Verano
Correo institucional_Escuela de Verano
 
Ice Presentacio
Ice PresentacioIce Presentacio
Ice Presentacio
 
Le client au centre
Le client au centreLe client au centre
Le client au centre
 
iPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im VertriebiPad sales app - Professionelles Präsentieren im Vertrieb
iPad sales app - Professionelles Präsentieren im Vertrieb
 
Social Media Marketing: mucho más que redes sociales
Social Media Marketing: mucho más que redes socialesSocial Media Marketing: mucho más que redes sociales
Social Media Marketing: mucho más que redes sociales
 
Manual divulgativo life_urogallo
Manual divulgativo life_urogalloManual divulgativo life_urogallo
Manual divulgativo life_urogallo
 
BAU International Executive MBA Webinar
BAU International Executive MBA WebinarBAU International Executive MBA Webinar
BAU International Executive MBA Webinar
 
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDevTriple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
Triple E class DevOps with Hudson, Maven, Kokki/Multiconf and PyDev
 
Biologie de synthèse
Biologie de synthèseBiologie de synthèse
Biologie de synthèse
 

Similar a El universo JavaScript en Drupal 8

Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos DrupalYmbra
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShopKeopx
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training DaysLa Drupalera
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a DrupalPedro Cambra
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!SergioIglesiasNET
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8Julian Valero
 
Introducción a la programación para joomla
Introducción a la programación para joomlaIntroducción a la programación para joomla
Introducción a la programación para joomlaRoberto Segura
 
Desarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesDesarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesYmbra
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2SEAT, S.A.
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalSiteGround España
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Robert Rayco Quiroz
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal CcrtvPedro Cambra
 

Similar a El universo JavaScript en Drupal 8 (20)

Arquitectura de proyectos Drupal
Arquitectura de proyectos DrupalArquitectura de proyectos Drupal
Arquitectura de proyectos Drupal
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShop
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days¡This is drupal! - Global Training Days
¡This is drupal! - Global Training Days
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a Drupal
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!
 
This is Drupal! (Basics)
This is Drupal! (Basics)This is Drupal! (Basics)
This is Drupal! (Basics)
 
Inciación a Drupal 8
Inciación a Drupal 8Inciación a Drupal 8
Inciación a Drupal 8
 
Introducción a la programación para joomla
Introducción a la programación para joomlaIntroducción a la programación para joomla
Introducción a la programación para joomla
 
Introduccion drupal
Introduccion drupalIntroduccion drupal
Introduccion drupal
 
Desarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con FeaturesDesarrollo y arquitectura de proyectos con Features
Desarrollo y arquitectura de proyectos con Features
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
JS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World ExampleJS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World Example
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupal
 
Dia2
Dia2Dia2
Dia2
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal Ccrtv
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
JQuery + React js
JQuery + React js JQuery + React js
JQuery + React js
 

Más de Ymbra

Migrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloMigrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloYmbra
 
Field Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersField Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersYmbra
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en DrupalYmbra
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al GitYmbra
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevoYmbra
 
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraYmbra
 
Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Ymbra
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webYmbra
 
Drupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónDrupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónYmbra
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5Ymbra
 

Más de Ymbra (10)

Migrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloMigrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrollo
 
Field Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersField Types API: Field, widgets y formatters
Field Types API: Field, widgets y formatters
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en Drupal
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al Git
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevo
 
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
 
Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs web
 
Drupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónDrupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versión
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Último (19)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

El universo JavaScript en Drupal 8

  • 1. El universo JavaScript en D8 Ramon Vilar
  • 4. Índice 01. D8 y JavaScript 02. El objeto JS global Drupal 03. Otras APIs del core 04. Añadir JS a nuestros módulos y temas 05. Buenas prácticas en desarrollo JS 06. Conclusiones
  • 6. Drupal 8 y JavaScript ● En esta nueva versión, la importáncia de JS ha crecido y mucho. ● Inclusión de librerías muy importantes y que cambian la forma de trabajar con JS – Ckeditor en el núcleo – Backbone, underscore, ... ● Librerías ya existentes a nuevas versiones: – jQuery 2.0.3, jQuery.UI 1.10.2, jQuery Once 1.2.3, ...
  • 7. Estrictos con la calidad de código “use strict” - http://ves.cat/kMMq Nueva característica de ECMAScript 5 para pasar a ejecutar código en modo estricto. Se debe añadir la cadena cómo primera línia dentro en el contexto de la función. JSHint – http://jshint.com Herramienta de control de calidad del código JS que escribimos. Integrado para revisar todo el código del núcleo. Ver .jshintrc y .jshintignore
  • 8. Ayuda a aplicaciones livianas domReady ● Cada petición a Drupal, carga drupal.js, fichero dónde carga toda la funcionalidad JS de Drupal. ● Este fichero sólo usaba jQuery para hacer: $(window).ready(function() {...}); ● Para hacer esto no hace falta cargar jQuery entero (90kb) y podemos usar domReady (740 bytes). domready(function () {...});
  • 9. Backbone & Underscore ● La complejidad de las aplicaciones JS hace que se requiera un framework MVC para poder arquitecturizarla ● Hoy en día existen múltiples que estan de moda: Backbone, Angular.js o Ember.js ● La comunidad se ha decidido por Backbone porque es la que tiene la mayor comunidad de usuarios y la más estable. ● Podeis ver ejemplos de uso en los módulos del core Edit, Toolbar o Contextual ● Underscore se incluye porque es requisito de Backbone, però también podemos aprovecharnos de ellos.
  • 10. HTML5 y RWD ● Drupal 8 está desarrollado en HTML5 y es mobile friendly ● Para ello usa algunas librerías de apoyo, cómo son Picturefill, classList o HTML5Shiv (*) ● Usa otras librerías interesantes cómo Modernizr que podemos usar en nuestros desarrollos. (*) HTML5Shiv va a desaparecer en breve porque el core no da soporte a IE8 http://ves.cat/kOor
  • 11. EL OBJETO JS GLOBAL Drupal
  • 12. El objeto JS global Drupal ● La gente sigue sin conocer un objeto clave en el desarrollo Drupal: Drupal /core/misc/drupal.js ● A tener en cuenta: – Drupal.behaviors – Drupal.theme – Drupal.t – ...
  • 13. Drupal.behaviors ● Es la forma de añadir comportamiento a una página o a un elemento: Drupal.behaviors.myModuleBehavior = { attach: function (context, settings) { $('.select').addClass('foo'); } }; ● Nos aporta funciones de attach y detach. Se llama en cada petición de la página (ajax) ● Si nos interesa que sólo se llame una vez: once().
  • 14. Drupal.theme ● El theming también llegó al JS. ● Ha cambiado un poco en D8 (no usamos prototype) ● Todo HTML añadido a la página se debería hacer mediante una función de theming Drupal.theme.placeholder = function (str) { return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>'; }; // Calling a theme function. Drupal.theme('placeholder', bar);
  • 15. Drupal.t ● Drupal.t() funciona exactamente igual que el método $this->t() (en D8 es un servicio y no una función procedural) Drupal.t(“Path: !uri”, {'!uri', uri}); ● Las variables se pueden pasar con @, ! y %; con el mismo significado que en PHP. Drupal.checkPlain
  • 17. Otras nuevas APIs (I) Drupal.announce Envia notificaciones al usuario para informar de cambios en la página que no se pueden describir con estados ARIA. Drupal.debounce Limita la invocación de una función en un periodo de tiempo. Drupal.tabbingManager También ligado a la accesibilidad del sitio. Controla el orden y las acciones a ejecutar en el tabbing de elementos.
  • 18. Otras nuevas APIs (y II) Drupal.displace Calcula distancias de offset de viewport. Resuelve el problema de posicionamiento entre Overlay y el Toolbar Drupal.dialog API que simula el elemento dialog de HTML5. Drupal.history Gestiona el historial de navegación
  • 19. AÑADIR JS A NUESTROS MÓDULOS Y TEMAS
  • 20. Añadir JS a nuestro módulo ● En Drupal 7 podíamos usar, entre otros: drupal_add_js('js/mymodule.js'); scripts[] = 'js/mymodule.js'; ● Esto en Drupal 8 no se puede usar. ● Ahora se nos obliga a definir todos nuestros ficheros JS cómo librerías. hook_library_info()
  • 21. mymodule.libraries.yml foo: version: 1.0 js: script.js: {} dependencies: - core/jquery - core/drupal - core/drupalSettings - core/jquery.once
  • 22. Añadir JS a nuestro módulo (III) ● En el módulo, lo añadiremos al render array de nuestro elemento: $my_render['#attached']['library'][] = 'mymodule/foo'; ● Si queremos añadirlo en todas las páginas, podremos usar hook_page_build() function edit_page_build(&$page) { if(!Drupal::currentUser()->hasPermission('...')) { return; } // some code $page['#attached']['library'][] = 'edit/edit'; }
  • 23. Añadir JS a nuestro tema ● Ahora todos los scripts tienen que declarar sus dependencias en ficheros de librerías mytheme.libraries.yml ● Para añadirlos a nuestros temas: … core: 8.x libraries: - bartik/base ckeditor_stylesheets: - css/ckeditor-iframe.css …
  • 24. Pasar datos de PHP a JS ● Tampoco podemos usar drupal_add_js() $form['#attached']['js'][] = array( 'type' => 'setting', 'data' => array('blockPlacement' => $placement), ); ● Para usar ese dato en nuestro JS: Drupal.settings.blockPlacement drupalSettings.blockPlacement ● drupalSettings es una variable global intencionada.
  • 26. Buenas prácticas en desarrollo JS (I) ● Usar siempre el modo estricto: “use strict”; ● JSHint está ahí para ayudarnos. Usémoslo! ● Usa Firebug o alguno de sus primos! ● Sobretodo, acordaos de declarar “todas” las variables! Es buena práctica hacerlo siempre al inicio de la función ● Funciones anónimas para evitar problemas de scope de variables y funciones. ● Perdamos el miedo a crear nuestras própias librerías o plugins.
  • 27. Buenas práctica en desarrollo JS (y II) ● Hay que ir con cuidado con los selectores JS que se escriben. Puede ser un foco de problemas de performance http://ves.cat/kRFb ● Si nuestro JS toma cierta notoriedad, no tengamos miedo de crear nuestro própio plugin jQuery, nuestro componente en Backbone o nuestra própia librería JS.
  • 28. Desarrollo de plugins jQuery ● Si un componente jQuery asociado tiende a ser reutilizable o tiene cierta notoriedad, escribamos un plugin jQuery. $.fn.myPlugin = function() { // My code. return this; }; $(“input”).myPlugin(); ● http://learn.jquery.com/plugins/
  • 29. Desarrollo de bibliotecas JS ● Si nuestra lógica se vuelve extensa y compleja, sería bueno crear nuestra própia biblioteca JS, encapsulando lo que nos interesa (¡podemos usar Backbone que para eso está!). var MyModule = { init: function(options) { // do my stuff. }, _myprivatefunction(): function { // other stuff. } }; MyModule.init(current_options);
  • 30. Conclusiones ● Muchas novedades en D8 en materia de JS. Ahora es tiempo de ponerlas en práctica! ● Muchas nuevas APIs que nos pueden ayudar ● Cuidado con las librerías JS que añadimos a nuestros proyectos. A veces es mejor picar algo a mano que empezar a añadir cosas descargadas de Internet. ● Debemos perder el miedo a hacer nuestras librerías y plugins. Es buena práctica!
  • 31. Contacto ● Twitter: @rvilar ● Correo: ramon@ymbra.com ● Web: http://ymbra.com ● Grácias a todos(as) ¿Preguntas?