Sigueme en Twitter
«Anterior | Siguiente»

Utilizando Prototype correctamente

11/03/2008

Leyendo Quest’s Blog, me encontré un par de artículos de Perfection Kills, que dan unos tips acerca del uso básico de Prototype.

El primero en especial me parece muy útil, a pesar de que son cosas muy simples son errores que todos cometemos al principio, ¿Seamos sinceros, que tantos se chutan toda la documentación antes de empezar a programar?

Me servirá de recordatorio así que me he tomado la libertad de publicarlo:

Errores comunes con Prototype

1.

Modo Incorrecto

1
document.getElementById('foo')

Modo Correcto

1
$('foo')

El operador $ es lo mas esencial de Prototype, de ahí viene toda su magia, utilizalo!

2.

Modo Incorrecto

1
2
var woot = document.getElementById('bar').value
var woot = $('bar').value

Modo Correcto

1
var woot = $F('bar')

El operador $F es un gran atajo para obtener valores de elementos.

3.

Modo Incorrecto

1
2
$('footer').style.height = '100px';
$('footer').style.background = '#ffc';

Modo Correcto

1
2
3
4
5
6
$('footer').setStyle(
  {
      height: '100px',
      background: '#ffc'
  }
)

Olvidate de problemas de bugs sobre diferentes navegadores si utilizas el metodo setStyle()

4.

Modo Incorrecto

1
$('tusuperelemento').innerHTML = 'algun contenido'

Modo Correcto

1
$('tusuperelemento').update('algun contenido')

Podras decir que es casi la misma, pero no opinaras lo mismo cuando necesites concatenar funciones.

5.

Modo Incorrecto

1
new Ajax.Request('ninja.php?weapon1=foo&weapon2=bar')

Modo Correcto

1
2
3
4
5
6
7
8
9
new Ajax.Request('ninja.php',
  {
    parameters:
      {
        weapon1: 'foo',
        weapon2: 'bar'
      }
  }
)

Escribe código limpio, tu cerebro te lo agradecerá.

6.

Modo Incorrecto

1
2
3
4
5
6
7
8
new Ajax.Request('blah.php',
  {
    method: 'POST',
    asynchronous: true,
    contentType: 'application/x-www-form-urlencoded',
    encoding: 'UTF-8',
  }
)

Modo Correcto

1
new Ajax.Request('blah.php')

Todos esos parámetros ya son defaults, ¿Para que repetirlos?.

7.

Modo Incorrecto

1
Event.observe('myContainer', 'click', doSomeMagic)

Modo Correcto

1
$('myContainer').observe('click', doSomeMagic)

Es mas fácil concatenar si escoges el segundo, pero aquí es cuestión de gustos, escoge el sabor que mas te guste.

8.

Modo Incorrecto

1
2
3
4
5
$$('div.hidden').each(function(el)
  {
    el.show();
  }
)

Modo Correcto

1
$$('div.hidden').invoke('show')

Invoke es muy útil, piensa en el como en un atajo cuando necesitas asignar valores iguales a todos tus elementos sin necesidad de iterar sobre ellos.

9.

Modo Incorrecto

1
2
3
4
5
$$('div.collapsed').each(function(el)
  {
    el.observe('click', expand);
  }
)

Modo Correcto

1
$$('div.collapsed').invoke('observe', 'click', expand)

Y también puede ser usado para manejo de eventos, muy practico!

10.

Modo Incorrecto

1
2
$$('input.date').invoke('observe', 'focus', onFocus);
$$('input.date').invoke('observe', 'blur', onBlur);

Modo Correcto

1
2
3
$$('input.date')
  .invoke('observe', 'focus', onFocus)
    .invoke('observe', 'blur', onBlur)

¿Para que abusar del operador $$ dos veces si podemos concatenar?

11.

Modo Incorrecto

1
2
3
4
5
6
$('productTable').innerHTML = 
  $('productTable').innerHTML + 
  '<tr><td>' + productId + ' '
  + productName + '</td></tr><tr><td>' 
  + productId + ' ' + productPrice + 
  '</td></tr>'

Modo Correcto

1
2
3
4
5
6
7
8
9
10
11
var rowTemplate = new Template('<tr><td>#{id} #{name}</td></tr><tr><td>#{id} #{price}</td></tr>');
  $('productTable').insert(
    rowTemplate.evaluate(
      {
        id: productId,
        name: productName,
        price: productPrice
      }
    )
  )
)

Este tip en especial es una joya, con Prototype podemos hacer templates, evitando de esta manera enormes plastas de código. Me confieso culpable de no haber utilizado esto antes.

Enlace | How well do you know prototype


Hay 5 comentarios:

  1. 11/03/2008Victor San Martin dice:

    No esta demás decir, que gran parte de los ejemplos son mejoras agregadas dese la version 1.6 de prototype en adelante.

    Saludos

  2. 11/03/2008Jesús dice:

    te mamaste wee.. deja lo copypasteo a 512..

  3. 11/03/2008Esparta Palma dice:

    Son buenos, y muchas mejoras, yo andaba mas en las versiones anteriores; pero creo que ya es justo actualizar :)

  4. 12/03/2008Michoacano dice:

    Muy buenos, enserio muy buenos…. es curioso ver que como incluso con un framework se hace codigo sucio, cuando una de las ventajas de usarlo es precisamente hacerlo mas limpio.

  5. 26/03/2008Usar un framework no nos quita lo sucio dice:

    [...] dí cuenta cuando leí el articulo de Pablasso: Utilizando Prototype correctamente que tendemos a usar incorrectamente un framework por dos [...]

Escribe tu comentario:

¿Escribiste código?


  Los mas frikis pueden suscribirse a los comentarios por RSS.