Created
August 1, 2015 12:43
-
-
Save LeonardoCiaccio/6cabdf629adafb8869a8 to your computer and use it in GitHub Desktop.
Monitoraggio di variabili [esempio](http://jsfiddle.net/leonardo_ciaccio/1q2stz78/)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
IDEA : | |
Monitorare il cambiamento di una variabile, per fare questo | |
dobbiamo utilizzare un oggetto che ci fornisce la possibilità | |
di utilizare una variabile di qualsiasi tipo purché non sia una | |
funzione ( JSON compatibile ) . | |
In sintesi ogni volta che cambia l'oggetto questo esegue una | |
operazione. | |
L'esempio utilizza un timeout per simulare un ritardo, questo non | |
è necessario al fine dell'idea. | |
PRO : | |
Controllare lo stato di una variabile a volte risulta | |
indispensabile per il controllo del codice. | |
CONTRO : | |
Come questo esempio occorrono almeno 50 millisecondi per il | |
trigger dell'evento dal cambiamento della variabile. | |
*/ | |
// Oggetto da tenere sotto controllo | |
var _ = { | |
mex : "" | |
}, | |
// Copia shadow per il confronto | |
eye, | |
// Funzione per clonare un oggetto | |
clone = function( obj ){ | |
if( !obj || typeof obj != "object" )return {}; | |
var news = {}; | |
for( var key in obj ) { | |
news[ key ] = obj[ key ]; | |
} | |
return news; | |
}, | |
// Evento per ogni cambiamento | |
observe = function( callback ){ | |
callback = callback || function(){}; | |
eye = clone( _ ); | |
setInterval( function(){ | |
if( JSON.stringify( _ ) !== JSON.stringify( eye ) ){ | |
callback( eye, _ ); | |
eye = clone( _ ); | |
} | |
} ); | |
}; | |
// Attivo la sentinella | |
observe( function( old, last ){ | |
// old = l'oggetto prima del cambiamento | |
// last = l'oggetto aggiornato | |
console.log( last.mex ); | |
} ); | |
// Setto un nuovo valore | |
_.mex = "Ciao !"; | |
// Per simulare un vento in ritardo | |
setTimeout( function(){ | |
_.mex = "Tutto ok 1?"; | |
} ); | |
/* | |
Dopo un piccolo ritardo setto di nuovo la variabile | |
se il tempo intercorso è troppo breve il trigger | |
precedente non viene preso in considerazione. | |
Nel mio caso 50 millisendi bastano per garantire entrambi. | |
*/ | |
setTimeout( function(){ | |
_.mex = "Tutto ok 2?"; | |
}, 50 ); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment