Ver Mensaje Individual
  #3 (permalink)  
Antiguo 17/12/2011, 19:06
gorani
 
Fecha de Ingreso: febrero-2010
Ubicación: Bizkaia
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Duda en construccion de prototipo

Muchas gracias ZeroKilled, me ha sorprendido la rapidez y como has entendido a la perfeccion el tema, ahora funciona esa parte como yo quiero, es decir sabe al recoger el json en que array lo tiene que almacenar y cada liga tiene sus datos separados.

Tengo duda en si tengo bien hecho la asignacion en la funcion cargar_dat como lo tengo hecho, es decir, crear un array (datos2) o directamente asignar campo por campo a liga_1.datos por ejemplo this.datos.eq = entry["gsx$eq"].$t; osea evitar el crear arrays para controlar recursos, aunque tambien me imagino que el array se destruye al finalizar la funcion, tengo esa duda.

Ahora el problema lo tengo en otro lado y no doy con ello.
Como yo recojo los datos mediante scripts de una hoja de calculo de google y los cargo dinamicamente si los necesito con funciones como CargaSRC que a su vez esta preparada para recoger una funcion callback (aparte de la que devuelve el jsonp), estas funciones son llamadas despues de cargar los scripts para asegurarse que los datos estan cargados, pero al tener varias ligas en los posts y el querer yo cargar dinamicamente segun necesite las ligas a veces tengo problemas de que al depender las tablas que dibujo de varios scripts se dibujan antes de cargar todos los datos y da errores.

He ideado una forma, despues de mirar y descartar loops de espera o funciones de espera que no me gustan como funcionan, que es la siguiente.

Al cargarse el blog con todos los post con sus tablas clasificatorias en vez de ejecutar las funciones las cargo en un array con esta funcion, que he añadido al prototipo y funciona perfecto.

function cargafuncion (funcion) {
try {
document.getElementById('cargando').style.visibili ty = 'visible';
this.cargas.anadir(funcion,false);
}
catch(er) {
alert("Error en cargafuncion");
}
} // fin cargafuncion

Osea carga todas las funciones como strings, recoge todas las funciones que llaman los post pero no se pueden ejecutar todavia por falta de datos al ser la carga de datos mas lenta.

En los post llamo a liga_1.cargafuncion('TablaClasif(liga_1,4)');

Cada liga sabe las funciones que tiene que ejecutar.

Por otro lado y es donde tengo problemas he añadido al prototipo la siguiente funcion

function ejecutar() {
try {
for( var i=0; i < this.cargas.length; i++ ) {
eval(this.cargas[i]);

}
document.getElementById('cargando').style.visibili ty = 'hidden';
}
catch(er) {
alert("Error en ejecutar");
}
} // fin ejecutar

y la llamo en la funcion siguiente

function init() {
cargaSRC (this.key, this.cons, this.dat, this.name+'.cargar_dat', function(){});
cargaSRC (this.key, this.cons, this.equ, this.name+'.cargar_equ', function(){});
cargaSRC (this.key, this.cons, this.hor, this.name+'.cargar_hor', function(){});
cargaSRC (this.key, this.cons, this.res, this.name+'.cargar_res', function(){this.ejecutar();});
}

(he añadido name para conocer el nombre liga_1 en este caso)

que es la que carga los scripts como callback, me aseguro que en el script ultimo que es el que mas datos tiene llame a this.ejecutar(), el problema es que me vuelve a a pasar lo mismo, no me reconoce this como liga_1 y da errores, tempoco en el prototipo la puedo llamar como liga_1.ejecutar porque solo me cargaria las funciones de liga_1, no se si queda claro el concepto.

Seguro que es una chorrada como lo otro, pero estoy probando todas las soluciones posibles y no consigo que ejecutar sepa que liga tiene que cargar y lo logico seria que con this se asignase.

Un saludo