<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Segmentation Fault! &#187; Prototype</title>
	<atom:link href="http://www.segmentationfault.es/category/programacion/prototype-programacion2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.segmentationfault.es</link>
	<description>La formulación de un problema es más importante que su solución.</description>
	<lastBuildDate>Tue, 29 Jun 2010 19:45:33 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Crear listas ordenables con Prototype y Scriptaculous</title>
		<link>http://www.segmentationfault.es/2009/08/listas-ordenadas-scriptaculous/</link>
		<comments>http://www.segmentationfault.es/2009/08/listas-ordenadas-scriptaculous/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 20:21:03 +0000</pubDate>
		<dc:creator>Noemí Losada</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[efectos visuales]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lorem ipsum]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[script.aculo.us]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.es/?p=1085</guid>
		<description><![CDATA[Scriptaculous es una librería que extiende a Prototype proporcionándonos la capacidad de crear efectos visuales e incluso animaciones a partir de unas funciones muy sencillas. Para poder implementar listas ordenadas necesitamos usar una de las funciones de Scriptaculous que convierte una lista convencional en una lista ordenable en tiempo real.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.prototypejs.org/" target="_blank">Prototype</a> es un <a href="http://es.wikipedia.org/wiki/Framework" target="_blank">framework</a> de javascript que pretende facilitar el desarrollo de aplicaciones web dinámicas. Prototype extiende javascript y nos ofrece funcionalidades que serían complejas de desarrollar con el clásico javascript.</p>
<p><a href="http://script.aculo.us/" target="_blank">Scriptaculous</a> es una librería que extiende a Prototype proporcionándonos la capacidad de crear efectos visuales e incluso animaciones a partir de unas funciones muy sencillas. Para poder implementar listas ordenadas necesitamos usar una de las funciones de Scriptaculous que convierte una lista convencional en una lista ordenable en tiempo real.</p>
<p>Para crear la lista ordenada nos basaremos en  el ejemplo que podemos encontrar en la <a href="http://wiki.github.com/madrobby/scriptaculous/sortable-lists-demo" target="_blank">wiki de scriptaculous</a>.</p>
<p>En primer lugar crearemos un documento html en el que añadiremos nuestra lista:</p>
<pre class="brush: xml;">

&lt;ul id=&quot;lista&quot;&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;Lorem&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;ipsum&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;dolor&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;sit&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;amet&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;consectetur&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;adipisci&lt;/li&gt;
  &lt;li style=&quot;position:relative;&quot;&gt;velit&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Como veis hemos asignado una id al elemento <em>ul</em><strong> </strong>llamado &#8220;lista&#8221; que después utilizaremos para decirle a Scriptaculous que lista debe convertir en ordenable. Por otra parte también hemos añadido <em>position:relative;</em> como estilo de cada ítem de la lista para que al convertirse en ordenable se puedan mover.</p>
<p>Para poder hacer uso de Prototype y Scriptaculous tenemos dos maneras de incluir las librerías, la primera de ellas es descargárnoslas y llamarlas desde nuestro html y la segunda manera es incluirlas directamente desde la web oficial (cabe destacar que google tiene una versión cacheada de estas librerías y podemos acceder a ellas desde el apartado API&#8217;S).</p>
<p>En nuestro código optamos por incluírlas directamente, para ello escribiremos el siguiente fragmento html entre las etiquetas <em>head</em> (aunque recientemente ha aparecido una <em>Best Practice </em>que indica que para cargar la página más rápidamente hay que llamar a javascript al final de la página justo antes del cierre del <em>body</em>) :</p>
<pre class="brush: xml;">

&lt;script src=&quot;http://script.aculo.us/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://script.aculo.us/scriptaculous.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Por último debemos decirle a Scriptaculous que lista debe convertir, para ello utilizaremos la siguiente instrucción:</p>
<pre class="brush: xml;">

&lt;script language=&quot;javascript&quot;&gt;
  Sortable.create(&quot;lista&quot;);
&lt;/script&gt;
</pre>
<p>Con la línea &#8220;Sortable.create(&#8220;lista&#8221;);&#8221; convertimos nuestra lista convencional en una lista ordenable mediante <a href="http://es.wikipedia.org/wiki/Drag_%27n_drop" target="_blank">Drag&amp;Drop</a> que esta muy de moda en la web 2.0. Si os fijáis en la llamada a la función create pasamos como primer parámetro el id de la lista que queremos convertir, esta función tiene otro parámetros que podemos descubrir en la <a href="http://wiki.github.com/madrobby/scriptaculous/sortable-create" target="_blank">página de la wiki referente a esta función</a>, entre otras opciones podemos especificar que elementos son los que se van a mover por la lista (como por ejemplo <em>tr</em> en el caso de querer una tabla con sus filas ordenables) e incluso podemos especificar un <em>handler</em> (un elemento que va a actuar como el punto desde el que arrastrar el elemento).</p>
<p>Si os interesa saber más sobre los efectos que puede realizar esta librería sólo es cuestión de investigar en la <a href="http://wiki.github.com/madrobby/scriptaculous/sortable-lists-demo" target="_blank">wiki de scriptaculous</a> dónde tenéis otra manera de ordenar listas como por ejemplo escoger que parte del ítem es la que queréis mover.</p>
<p>Aquí os dejo una pequeña demo de nuestra lista:</p>
<ul id="lista">
<li style="position:relative;">Lorem</li>
<li style="position:relative;">ipsum</li>
<li style="position:relative;">dolor</li>
<li style="position:relative;">sit</li>
<li style="position:relative;">amet</li>
<li style="position:relative;">consectetur</li>
<li style="position:relative;">adipisci</li>
<li style="position:relative;">velit</li>
</ul>
<p><script>// < ![CDATA[
  Sortable.create("lista");
// ]]&gt;</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.segmentationfault.es/2009/08/listas-ordenadas-scriptaculous/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Atajos de Prototype, el mejor aliado del programador</title>
		<link>http://www.segmentationfault.es/2009/04/atajos-prototype/</link>
		<comments>http://www.segmentationfault.es/2009/04/atajos-prototype/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 14:35:28 +0000</pubDate>
		<dc:creator>Christopher Vallés</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.es/?p=5</guid>
		<description><![CDATA[Cuando programamos siempre hay determinadas construcciones que repetimos hasta la saciedad los atajos de Prototype evitan que escribamos muchas líneas de código y nos facilitan la vida.]]></description>
			<content:encoded><![CDATA[<p>Cuando programamos siempre hay determinadas construcciones que repetimos hasta la saciedad. En el caso de Javascript una de las construcciones más utilizadas es la de obtener un objeto especificando una <em>ID</em>. Un ejemplo podría ser el siguiente:</p>
<pre class="brush: jscript; light: true;">
document.getElementById('element').style.display = 'none';
</pre>
<p>La gente que desarrolla Prototype ha caído en la cuenta de estas instrucciones y nos proporciona una serie de atajos claros y cortos (esa es la gracia de los atajos) y aquí vamos a tratarlos todos.</p>
<p>Para empezar cabe destacar que al utilizarlos Prototype automáticamente extiende todos los objetos con todas las funcionalidades disponibles.</p>
<p>Hay siete atajos en total y estos se caracterizan por estar construidos con el símbolo <strong>&#8220;$&#8221; </strong>y una letra.</p>
<p><span style="text-decoration: underline;"><strong>$() Extracción rápida de objetos inteligentes</strong></span></p>
<p>Este atajo nos permite extraer objetos especificando la <em>ID</em>, como ya he comentado Prototype extiende su funcionalidad automáticamente<em>.</em></p>
<pre class="brush: jscript;">

/**
*
* Uso del atajo $() para extraer objetos mediante su ID
*
*/

// Código clásico
document.getElementById('element').style.display = 'none';

// Mediante los atajos de Prototype
$('element').style.display = 'none';

// Utilizando los métodos extendidos
$('element').hide();
</pre>
<p><span style="text-decoration: underline;"><strong>$w() Crear arrays nunca fue tan fácil</strong></span></p>
<p>Este atajo nos permite crear arrays sin necesidad de preocuparnos de las comillas y comas que separan a cada elemento, para crear una array lo único que hay que pasarle es una <em>string</em> y los valores separados por un espacio (de ahí la &#8220;w&#8221; de whitespace).</p>
<pre class="brush: jscript;">

/**
*
* Uso del atajo $w() para crear arrays
*
*/

// Código clásico
var frutas = ['manzana','pera','fresas','melocotón','melón'];

// Mediante $w()
var frutas = $w('manzana pera fresas melocotón melón');
</pre>
<p><strong><span style="text-decoration: underline;">$$() Buscando con estilo</span></strong></p>
<p>Este atajo nos permite obtener cualquier objeto que cumpla las reglas CSS que le pasemos. No solo permite especificar nombres de clases sino que también podemos utilizar selectores CSS avanzados ya que $$() contempla la gran mayoría del estándar CSS 3.</p>
<pre class="brush: jscript;">

/**
*
* Ejemplos de uso del atajo $$()
*
*/

$$('div');
// Selecciona todos los DIV's en el documento
// Es similar al uso de document.getElementsByTagName('div');
// Devuelve una array de elementos extendidos

$$('#container');
// Igual que $('container') solo que este devuelve siempre una array

$$('li.even');
// Todos los elementos LI con la clase 'even'

$$('#container a[rel]');
// Todos los links que tengan un atributo 'rel' que estén dentro del elemento con ID 'container'

$$('a[href=&amp;quot;#&amp;quot;]');
// Todos los links cuyo atributo href sea '#'

$$('#container li', '#menu li');
// Todos los elementos LI que estén dentro de los elementos con ID 'container' o 'menu'

$$('a:not([rel~=nofollow])');
// Todos los links excluyendo aquellos que tengan la palabra 'nofollow' en el atributo 'rel'

$$('table tbody &gt; tr_nth-child(even)');
// Todas las filas pares de todas las tablas

$$('div:empty');
// Todas los objetos DIV que estén vacíos
</pre>
<p>Para ver un listado completo de los selectores CSS soportados podéis visitar la <a title="Método $$" href="http://prototypejs.org/api/utility/dollar-dollar" target="_blank">documentación oficial</a></p>
<p><span style="text-decoration: underline;"><strong>$A() Unificando colecciones</strong></span></p>
<p>El atajo $A() nos permite convertir cualquier colección de datos <em>array-compatible</em> en un objeto Array.</p>
<pre class="brush: jscript;">

/**
*
* Ejemplo de uso del atajo $A()
*
*/

// Usando tipos regulares
var p = document.getElementsByTagName('p');
for( var i = 0; i &lt; p; ++i)
 Element.hide(p.item(i));
Element.update(p.item(p.length -1), 'Un poco largo');

// Al estilo Prototype (sin usar los elementos extendidos)
var p = $A(document.getElementsByTagName('p'));
p.each(Element.hide);
Element.update(p.last(), 'Esto está mejor');
</pre>
<p>Otro ejemplo podría ser el siguiente:</p>
<pre class="brush: jscript;">

/**
*
* Ejemplo de uso del atajo $A()
*
*/

// Usando tipos regulares
function showArgs(){
 alert(Array.prototype.join.call(arguments, ', ');
}

// Mediante Prototype
function showArgs(){
 alert($A(arguments).join(', '));
}
</pre>
<p><span style="text-decoration: underline;"><strong>$F() Trabajando como expertos con los campos</strong></span></p>
<p>Este atajo nos permite conocer el valor de cualquier campo que se encuentre en un formulario, puede parecer una tontería pero pensad en los campos radio button, en los checkbox o en las listas de selección múltiple y además hay que tener en cuenta las inconsistencias entre navegadores, pues bien Prototype tiene en cuenta todo esto y retorna los siguientes valores:</p>
<ul>
<li>Para listas de selección múltiple devuelve un array de valores, una entrada por cada valor, en otro caso simplemente devuelve un valor simple.</li>
<li>Para radio butons o checkboxes sin marcar devuelve <strong>null</strong></li>
<li>Para cualquier otra cosa devuelve un valor simple</li>
</ul>
<p>Todos los valores son retornados como Strings, en caso de que en las listas el atributo <em>value=<strong> </strong></em>no existe en cada tag <em>option</em> este método devuelve el texto contenido entre las tags <em>option</em></p>
<p><span style="text-decoration: underline;"><strong>$H() Crear Hashes de cosas</strong></span></p>
<p>Es un acceso directo para la creación de Hashes, realmente lo que estamos haciendo es <em>new Hash(&#8230;)</em>.</p>
<p><span style="text-decoration: underline;"><strong>$R() Manipulando rangos</strong></span></p>
<p>Este es uno de los atajos menos utilizados en Prototype, básicamente permite crear rangos de números.</p>
<pre class="brush: jscript;">

/**
*
* Ejemplos de uso del atajo $R()
*
*/

$R(1,5).each(function(n){
 // Esta función es llamada 5 veces, desde 1 hasta 5
});

$A($R(1,7));
// -&gt; [1,2,3,4,5,6,7]
// Crea un array con los valores desde 1 hasta 7

$R(1,10).findAll(function(n){
 return 0 != n % 2;
});
// -&gt; [1,3,5,7,9]
// Devuelve todos los número impares del rango desde 1 hasta 10
</pre>
<p>Como podéis ver los atajos de Prototype nos facilitan la vida y sobretodo evitan que tengamos la necesidad de escribir muchas líneas de código.</p>
<p>Probad y ya me contaréis.</p>
<p><span style="text-decoration: underline;">Bibliografía:</span></p>
<p>[1] <em>Christophe Porteneuve. <span style="text-decoration: underline;">Prototype and script.aculo.us</span> 2007 Ed. </em>The Pragmatic Programmers. ISBN:13 978-1-934356-01-2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.segmentationfault.es/2009/04/atajos-prototype/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->