Para los que no conozcan ni ajaxslt ni dojo, les dedico estos primeros parrafos, para despues comentar como integrarlos y poder usarlos de forma conjunta utilizando las virtudes de cada uno.
Si hacemos webs 2.0 , deben tener un comportamiento dinámico y atractivo para el usuario, debería usar servicios web y AJAX en definitiva. Si nos conectamos a servicios web que devuelven XML como es normal, obtenemos en javascript un string que contiene el xml, ¿y ahora que hacemos con él? Hay dos opciones. La primera es cargar ese XML en un DOM y mediante xpath ir obteniendo los datos y representarlos en nuestro HTML. La segunda opción es aplicar un XSL a ese XML para obtener el HTML que incrustaremos en nuestra página. Para hacer esa aplicación de HTML = XSL(XML), necesitamos un parser y un transformador que lo haga, Google nos ofrece unas librerías en javascript que se encargan de ello, lo llaman proyecto ajaxslt y es totalmente gratuito.
Por otra parte, ya que tenemos que darle tanta importancia al javascript del cliente para que parezca una aplicacion de escritorio, estaría bien implementar en javascript como si de un lenguaje de alto nivel se tratase. De forma nativa javascript no tiene herencia, ni polimorfismo, ni eventos, ni objetos (existe una chapucilla para conseguir objetos). Así que intentar programar una arquitectura software interesante y escalable con este lenguaje básico puede ser tedioso. Para solucionarlo nace dojo, como otras plataformas, que nos permite utilizar javascript, pero nos facilita el tener herencia, polimorfismo, efectos, eventos, paquetes tipo java,... Es decir, que con esto si podemos montar una buena arquitectura.
Llegado este punto nos puede surgir el caso en el que nos hemos decidido por utilizar dojo como plataforma en el cliente y que queremos utilizar ajaxstl como transformador de XML y XSL. Esto puede convivir sin problemas si se trata por separado, pero ¿y si queremos que ajaxslt sea un paquete dentro de nuestros paquetes de dojo? esto sería muy interesante ya que todo lo que utilizamos tiene un mismo estilo, todo son paquetes, y no hay cosas de una forma y cosas de otra. Para conseguir integrar ajaxslt en dojo, pueden surgir problemas de compatibilidad entre navegadores, así que os digo como solucionarlo sin ningún problema.
En javascript podemos definir funciones de dos formas diferentes:
function mifuncion (miarqumento){
//codigo
}
o de la siguiente forma
mifuncion = function(miargumento){
//codigo
}
Pues bien, si integramos directamente ajaxslt en dojo tenemos que las funciones y variables se definen de la primera forma, esto ocasiona un problema y es que con dojo y esa primera forma en Internet Explorer funciona correctamente, pero en FireFox no funciona nada. Esto se debe a que FF entiende que si defines la funcion de la primera forma, es una funcion local, por lo tanto cuando dojo se trae ese paquete, pues esas funciones quedan locales al paquete y no se pueden usar desde fuera, por eso no funciona nada, en cambio IE las toma como globales y todo funciona.
La solución es modificar todas las cabeceras de las funciones para ponerlas de la segunda forma, además todas las variables que queramos que sean globales, no deben llevar el "var " delante, ya que entonces estamos en el mismo problema, que se piensa que es una variable local.
Costó mucho encontrar ese problema, porque en principio no parecía lógico que en uno funcionase y en el otro no, así que tras muchas horas se detectó y tras eso, en cuestión de 20 minutos ya estaba todo integrado y funcionando.
Jose Carlos Calvo Tudela
Si hacemos webs 2.0 , deben tener un comportamiento dinámico y atractivo para el usuario, debería usar servicios web y AJAX en definitiva. Si nos conectamos a servicios web que devuelven XML como es normal, obtenemos en javascript un string que contiene el xml, ¿y ahora que hacemos con él? Hay dos opciones. La primera es cargar ese XML en un DOM y mediante xpath ir obteniendo los datos y representarlos en nuestro HTML. La segunda opción es aplicar un XSL a ese XML para obtener el HTML que incrustaremos en nuestra página. Para hacer esa aplicación de HTML = XSL(XML), necesitamos un parser y un transformador que lo haga, Google nos ofrece unas librerías en javascript que se encargan de ello, lo llaman proyecto ajaxslt y es totalmente gratuito.
Por otra parte, ya que tenemos que darle tanta importancia al javascript del cliente para que parezca una aplicacion de escritorio, estaría bien implementar en javascript como si de un lenguaje de alto nivel se tratase. De forma nativa javascript no tiene herencia, ni polimorfismo, ni eventos, ni objetos (existe una chapucilla para conseguir objetos). Así que intentar programar una arquitectura software interesante y escalable con este lenguaje básico puede ser tedioso. Para solucionarlo nace dojo, como otras plataformas, que nos permite utilizar javascript, pero nos facilita el tener herencia, polimorfismo, efectos, eventos, paquetes tipo java,... Es decir, que con esto si podemos montar una buena arquitectura.
Llegado este punto nos puede surgir el caso en el que nos hemos decidido por utilizar dojo como plataforma en el cliente y que queremos utilizar ajaxstl como transformador de XML y XSL. Esto puede convivir sin problemas si se trata por separado, pero ¿y si queremos que ajaxslt sea un paquete dentro de nuestros paquetes de dojo? esto sería muy interesante ya que todo lo que utilizamos tiene un mismo estilo, todo son paquetes, y no hay cosas de una forma y cosas de otra. Para conseguir integrar ajaxslt en dojo, pueden surgir problemas de compatibilidad entre navegadores, así que os digo como solucionarlo sin ningún problema.
En javascript podemos definir funciones de dos formas diferentes:
function mifuncion (miarqumento){
//codigo
}
o de la siguiente forma
mifuncion = function(miargumento){
//codigo
}
Pues bien, si integramos directamente ajaxslt en dojo tenemos que las funciones y variables se definen de la primera forma, esto ocasiona un problema y es que con dojo y esa primera forma en Internet Explorer funciona correctamente, pero en FireFox no funciona nada. Esto se debe a que FF entiende que si defines la funcion de la primera forma, es una funcion local, por lo tanto cuando dojo se trae ese paquete, pues esas funciones quedan locales al paquete y no se pueden usar desde fuera, por eso no funciona nada, en cambio IE las toma como globales y todo funciona.
La solución es modificar todas las cabeceras de las funciones para ponerlas de la segunda forma, además todas las variables que queramos que sean globales, no deben llevar el "var " delante, ya que entonces estamos en el mismo problema, que se piensa que es una variable local.
Costó mucho encontrar ese problema, porque en principio no parecía lógico que en uno funcionase y en el otro no, así que tras muchas horas se detectó y tras eso, en cuestión de 20 minutos ya estaba todo integrado y funcionando.
Jose Carlos Calvo Tudela
Antes de nada enhorabuena por vuestra iniciativa. Me parece una gran idea unir estas herramientas porque la programación con Javascript directamente era un infierno... y me acabas de proponer un mundo feliz jejeje, tomo nota porque seguramente lo use en mi proyecto. Suerte!
ResponderEliminar