Llega una nueva entrega de «Fantasmas del código» y, en esta ocasión le toca a SharePoint 2013 y los problemas con jQuery.
Escenario
Cuando tenemos que personalizar un sitio de SharePoint 2013 es muy probable que hagamos uso de jQuery, plugins, etc… y así dotarlo de «vida» y de nuevas funcionalidades que no vienen por defecto y que queremos añadir en nuestros Web Parts, User Controls, Display Templates, Page Layouts,… y, como todo el mundo sabe, la mejor forma realizar llamadas jQuery es usando el alias «$» como por ejemplo cuando queremos que nuestro código se ejecute cuando la página esté lista.
$(document).ready(function() {
// código a ejecutar cuando la página esté lista
});
$(function() {
// código a ejecutar cuando la página esté lista
});
Hasta aquí todo perfecto, nada que no hayamos visto y, lo mejor es que nuestro código funcionará correctamente… o no.
Problema
Ahora comienza la pequeña broma de los becarios
que tocan el código de los productos. Si editamos nuestra página, es bastante probable que todo siga funcionando a las mil maravillas hasta que, de repente, editando una página nos damos cuenta que nuestro código ha dejado de funcionar sin previo aviso, con nocturnidad y alevosía y nos quedamos con cara de Carlo Ancelotti (la ceja hasta el cielo). ¡Pero si esto funcionaba perfecto! O más conocido como «En mi casa funcionaba». Y aquí podemos tracear y tracear usando el depurador que más nos guste, comprobaremos que el error se debe a que jQuery no está cargado, pero… el fichero aparece en la pila de carga como OK, es decir, ¡que sí que está cargado! ¿Y por qué me dice que no lo está cuando estamos viendo lo contrario?
Solución
La solución es simple y llanamente cambiar «$» por «jQuery» en nuestro código. Como podéis ver es muy simple y a la vez muy engorrosa si hemos avanzado bastante en el desarrollo, además que para los que estamos acostumbrados a usar jQuery va a ser un poco duro adaptarse.
Explicación
Algún becario
(y no quiero señalar…) tuvo la brillante idea de que SharePoint en algunos de sus scripts haga uso de «$» como alias con lo que si SharePoint necesita hacer uso de la funcionalidad que contiene el fichero assetpicker.js o alguno otro más con ese mismo problema, nuestro «$» queridos developers no se referirá a jQuery porque los scripts estarán en modo «battle» y ninguno nos va a responder como debería.
Desde mi punto de vista, que otro script haga uso de «$» como alias es un error de guardería, básicamente por lo extendido que está esta gran librería de JavaScript y que hace muy probable o casi seguro que cualquier desarrollo que incluya JavaScript tendrá una referencia a jQuery, así que mi postura se acerca mucho a la de «Becarios para aprender y no para producir» por favor.