Skip to content

Instantly share code, notes, and snippets.

@rnaffer
rnaffer / ObservableProperties.js
Last active October 27, 2015 03:33
Ejemplo del patrón de diseño "Observable Properties" con explicación.
// Permite reaccionar a valores que están cambiando dentro del objeto.
// Asemeja al data binding (iNotifyPropertyChanged) en c#.
// Utiliza los métodos como propiedades en ves de campos publicos. Como hace el framework Knockout.js
// prieceChanging y prieceChanged son arreglos que almacenarán los métodos que se ejecutarán en esos casos.
var Book = function( name, price ) {
var priceChanging = [],
priceChanged = [];
@rnaffer
rnaffer / ChainingPattern.js
Last active October 27, 2015 03:35
Ejemplo del patrón de diseño "Chaining" con explicación.
// Util para crear API's que trabajen con objetos mutables.
// Trabaja con un objeto raiz.
// Patrón utilizado en JQuery y LinQ
// Las funciones retornan su objeto raiz para que sea posible encadenar funciones
// y hacen las operaciones sobre una variable que pertenece al objeto raiz.
var Calc = function( start ) {
this.add = function( x ) {
@rnaffer
rnaffer / FunctionArgumentPattern.js
Last active October 27, 2015 03:37
Ejemplo del patrón de diseño "Function Argument" con explicación.
// "arguments" contiene todos los argumentos pasados a la función.
// Util en caso de que el numero de argumentos posibles sea indeterminado.
// En el ejemplo se suman los números pasados como argumentos, aunque no verifica antes si son números.
function mySum() {
var x = 0,
i = 0,
length = arguments.length;
for ( ; i < length; i++ ) {
@rnaffer
rnaffer / AsyncOperations.js
Last active October 27, 2015 03:40
Concatenar operaciones asíncronas empleado promesas
// Para los casos en los que es necesario concatenar tareas asíncronas.
// $.get() es una version simplificada de esto:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
// Cada operacion al finalizar retorna una promesa que es empleada como una cadena de tareas
@rnaffer
rnaffer / BasicAjax.js
Last active October 27, 2015 03:41
Consideraciones básicas de Ajax
/* Explicación de los parámetros básicos de ajax
* Puede almacenarse en una variable o llamarse directamente.
* method: método usado para la solicitud. "POST", "GET", "PUT".
* data: incluye datos en el procedimiento.
* dataType: establece el formato del archivo que sera devuelto "xml, json, jsonp, script, text o html"
* context: el objeto descrito sera el contexto de los callback relacionados con la solicitud.
*/
var request = $.ajax({
url: "script.php",
method: "POST",
@rnaffer
rnaffer / 0_reuse_code.js
Created October 27, 2015 03:57
Here are some things you can do with Gists in GistBox.
// Use Gists to store code you would like to remember later on
console.log(window); // log the "window" object to the console
@rnaffer
rnaffer / AsyncOperationsLikeSync.js
Last active October 27, 2015 17:22
Uso de nuevas características de javascript (ES6) para hacer operaciones asíncronas de forma estructurada.
// El uso de generadores aún no está estandarizado. 25/10/2015
// Requiere generators.js
// El asterisco '*' lo define como generador
// yield detiene el procedimiento hasta que pueda continuar
// Librerias: bluebird para frontend -usado en el ejemplo-, co para bakcend node.js, q para angular
Promise.coroutine(function* () {
var user = yield $.get('user.json');
// Do stuff with user
@rnaffer
rnaffer / TimerPattern.js
Created October 27, 2015 17:18
Ejemplo del patrón de diseño "Timer Pattern" con explicación
// Los temporizadores en JavaScript son: setTimeout() y setInterval().
// El primero se ejecuta una sola vez y el segundo se ejecuta continuamente.
// En ambos casos el primer parametro es la función que se ejecutará y el segundo el tiempo en milisegundos.
// El periodo mínimo es de 4ms y el temporizador solo se ejecuta cuando la función principal ha finalizado.
var i = 0;
var timer = setInterval(function() {
console.log( i );
i++;
@rnaffer
rnaffer / AsynchronousExecutionPattern.js
Created October 27, 2015 18:29
Ejemplo del patrón de diseño "Asynchronous Execution" con explicación.
// Las ejecuciones muy largas de codigo JavaScript tienden a bloquear el UI y dejar al navegador sin responder,
// sobre todo cuando se emplean bucles. Este patron emplea temporizadores para evitar precisamente este problema.
// Es un inconveniente bastante común en dispositivos móviles.
var buffer = function( items, iterFn, callback ) {
var i = 0,
len = items.length;
setTimeout(function() {
@rnaffer
rnaffer / RecursiveSetTimeoutPattern.js
Last active October 27, 2015 18:57
Ejemplo del patrón de diseño "Recursive SetTimeout" con explicación.
// El orden empleando setInterval() puede ser impredecible ( 0 1 2 5 4 6 8 7).
// Invocar recursivamente a setTimeout() puede asegurar el orden de ejecución ( 0 1 2 3 4 5 6).
// Hasta que no finalize una ejecución no continua con las demás.
var ul = $('ul.log'),
index = 0;
setTimeout(function getDate() {
var started = new Date(),