Comunidad de diseño web y desarrollo en internet online

Singleton JavaScript

Citar            
MensajeEscrito el 09 May 2013 11:01 pm
Hola a todos.

Estoy empezando a usar javascript y necesito algo de orientación. (o tal vez mucha :shock: )

Estoy creando un tema que esta compuesto por varias paginas html5, css3 y javascript.

Estas paginas P1.HTML, P2.HTML, ....PN.HTML deben compartir variables y funciones globales en javascript que se deben inicializar una sola vez cuando se abre el tema.

Las paginas deben poder leer o actualizar las variables globales y acceder a las funciones globales.

En AS3 tu podías crear un singleton el cual podia contener variables y las funciones y podías leer o modificar las variables desde otra clase o llamar a un funcion contenida en el singleton

Se puede crear algo similar con html5 y javascrip o estoy diciendo una tontería :cry:

Cualquier comentario, sugerencia o ejemplo es bien recibida. :P

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 May 2013 12:40 pm
No, no es posible. Cada vez que el visitante pasa de una página a la otra, todo el código, asignación de memoria, variable, etc. de JavaScript se destruye.

La forma que tienes de tener persistencia en JavaScript es mediante cookies o WebStorage.

Pero me parece que lo que estás necesitando se podría resolver con Ajax. Si fueras tan amable de comentarnos qué es lo que quieres lograr...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 May 2013 03:32 pm
Hola a todos.

Por ejemplo yo tengo un archivo tema.js con lo siguiente:


/* variables generales del tema */

var pagina = [
't1_p1.html',
't1_p2.html',
't1_p3.html',
't1_p4.html',
't1_p5.html',
't1_p6.html',
't1_fin.html'
];

var VERSION = 'Versión 2.0';
var name_student = 'Loro Rojo';
var score_student = 0;
var total_preguntas_tema = 7;


/* Funciones Generales */

function nombre_boton_etiqueta(cual_boton,nombre_etiqueta){
// Set el texto a la etiqueta
$('#btn_etiqueta').text(nombre_etiqueta);
//Get Position del boton
var p = $(cual_boton);
var offset = p.offset();
//Set Position de la etiqueta
$('#btn_etiqueta').offset({ top: offset.top - 32, left: offset.left});
$('#btn_etiqueta').css("visibility","visible");
}


function N_general(){

----
----

}



En la pagina 1) p1.html contendria p1.js

Dependiedo de lo que haga el alumno yo necesito actualizar despe p1.js

a la variable score_student que esta en tema.js

o tambien llamar a la funcion nombre_boton_etiqueta(1,avanza); que esta en tema.js

Esto mismo lo pudiera hacer cada una de las paginas que contenga el tema p2.js, p3.js ... pN.js


Gracias por contestar :D
Saludos

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 May 2013 03:39 pm
Lo que estás diciendo sí se puede hacer, pero no tiene nada que ver con singleton.

Aunque el código fuente JS esté dividido en varios archivos, para el navegador todo el código de los diferentes archivos es un solo código. Así que sí, desde p1.js puedes llamar a funciones y usar variables que están en tema.js siempre y cuando cargues ambos archivos en el mismo .html con sus correspondientes tags <script>.

¿Era eso lo que preguntabas?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 May 2013 04:35 pm
Cuando pasas de una pagina a otra por ejemplo de p1.html a p2.html y por consiguiente de p1.js y p2.js

las variables se pierden, por ejemplo si p1.js asigno a la variable score_student = 1;

al cargar p2.html y lees a la variable score_student esta no conservo el valor de 1 que se asigno en p1.js :cry:

1) Tal vez el mejor camino sea almacenar las variables en el web storge ?? :oops:

2) En que casos se utilizaría un singleton de Javascript??

Saludos y gracias por contestar :)

Por lororojo

52 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 May 2013 04:52 pm
Estás tratando de implementar una solución de un paradigma en otro paradigma diferente.

A menos que los datos que quieras que sean persistentes sean relativamente grandes (suficientes como para justificar el uso de una base de datos) no vale la pena implementar WebStorage.

En el caso que comentas, yo pasaría el valor de la variable score_student por POST o GET, o mejor aún, la llevaría en una variable de sesión del lado del servidor.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.