No es que me guste revivir temas de hace 2 años... pero bueno.
Ésto es algo muy simple:
Código PHP:
<div id="capa"></div>
<script type="text/javascript">
var capa = document.getElementById("capa");
var cualquiera = function (q) {
alert(q);
}
capa.setAttribute("funcion_cualquiera",cualquiera);
var paco = eval( capa.getAttribute("funcion_cualquiera") );
paco("hola"); // y funciona!!
</script>
Y lo de serializar objetos... está muy básico y sólo admite
Strings como propiedades, pero bueno, sería cuestión de extenderlo hasta las necesidades que uno quiera:
Código PHP:
<div id="exterior"><div id="capa"></div></div>
<script type="text/javascript">
// Creo la clase
function coche(marca,modelo,color) {
this.marca = marca;
this.modelo = modelo;
this.color = color;
// Creo el método por el cual la clase coche pasará a ser un String con sus propiedades escritas
this.toJSON = function() {
var str = "{ ";
for(var i in this) {
if( (typeof this[i]) != "function" ) {
str += i+": '"+this[i]+"', ";
}
}
str = str.substring(0, str.length-2); // quitamos el espacio y la coma del final
str += " }";
return str;
}
}
// Creo el método inverso: sacar el objeto del string JSON
function JSONtoObject(str) {
var dev = new Object();
str = str.substring(2, str.length-2); //quitamos los { } y los espacios sobrantes
str = str.split(", ");
for(var i=0; i<str.length; i++) { // con caja conjunto propiedad:valor
for(var j=0, sp = str[i].split(": "); j<sp.length; j++) {
dev[ sp[0] ] = sp[1];
}
}
return dev;
}
var capa = document.getElementById("capa");
// Creo el objeto
var audiTTrojo = new coche("audi", "TT" ,"rojo");
// Guardo el objeto en forma de JSON
capa.setAttribute("miCoche", audiTTrojo.toJSON() );
// Muestro cómo cambia el HTML por si quisiéramos hacer algo con él
alert(document.getElementById("exterior").innerHTML);
// Recupero el objeto
var elCoche = JSONtoObject( capa.getAttribute("miCoche") );
// Muestro el objeto
var presentacionCoche = "";
for(var i in elCoche) {
presentacionCoche += "elCoche['"+i+"'] = " + elCoche[i] +"\r\n";
}
alert(presentacionCoche);
</script>
Bueno, me sincero: El
toJSON() no lo he inventado yo por supuesto.
La librería Prototype tiene el suyo, evidentemente finiquitado al gusto y para todos los tipos de elementos (incluso
para String). Ni siquiera tiene por qué haberlo inventado prototype, aquí hay un
enlace con un código que puede hacerlo también.
En fin, que poderse se puede hacer, lo que pasa es que no conocía el cómo, como suele pasar.