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 / 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 / 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",