<?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>(function() { &#187; jpaging</title>
	<atom:link href="http://maxb.net/blog/category/jpaging/feed/" rel="self" type="application/rss+xml" />
	<link>http://maxb.net/blog</link>
	<description>// MAXB.NET LABS</description>
	<lastBuildDate>Mon, 16 May 2011 19:12:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Imparare jQuery – 9 – jPaging – Step 5 : closure contesti e visibilità</title>
		<link>http://maxb.net/blog/2008/08/28/imparare-jquery-9-jpaging-step-5-closure-contesti-e-visibilita/</link>
		<comments>http://maxb.net/blog/2008/08/28/imparare-jquery-9-jpaging-step-5-closure-contesti-e-visibilita/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 14:17:57 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=129</guid>
		<description><![CDATA[post precedente : eventi indice tutorial Cerchiamo prima di proseguire di fare chiarezza sull&#8217;ambito delle variabili, e sulla visibilità delle variabili esterne alle closure degli eventi. Assegno fuori dal contesto degli eventi una variabile La userò solamente in questo esempio. &#8230; <a href="http://maxb.net/blog/2008/08/28/imparare-jquery-9-jpaging-step-5-closure-contesti-e-visibilita/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/">post precedente : eventi</a></li>
<li><a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
</ul>
<p>Cerchiamo prima di proseguire di fare chiarezza sull&#8217;ambito delle variabili, e sulla visibilità delle variabili esterne alle closure degli eventi.</p>
<p>Assegno fuori dal contesto degli eventi una variabile </p>
<pre class="brush: jscript; title: ; notranslate">
var _context = _page;
</pre>
<p>La userò solamente in questo esempio. Nei successivi post non ci sarà traccia di questo codice.</p>
<p>All&#8217;interno degli eventi di tutti i tasti<br />
subito dopo questo:</p>
<pre class="brush: jscript; title: ; notranslate">
var _id = parseInt(jQuery(this).text()) - 1;
</pre>
<p>inserisco questo piccolo snippet di codice:</p>
<pre class="brush: jscript; title: ; notranslate">
alert(&quot;Prima del click : &quot; + _context);
_context = (_id + 1);
alert(&quot;Dopo il click : &quot; + _context);
</pre>
<p><strong>Le variabili dichiarate fuori dall&#8217;evento sono visibili e possono essere modificate all&#8217;interno degli eventi.</strong></p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step5.html" target="_blank">DEMO</a><br />
<a href="http://maxb.net/scripts/jpaging/tutorial/step5.js" target="_blank">SORGENTE</a></p>
<p>Ora pulendo il nostro codice incapperemo in un particolare bug da evitare quando lavoriamo all&#8217;interno delle closure.</p>
<p>Abbiamo la variabile _page. Usiamo direttamente quella.<br />
Cancellando ogni riferimento a _context. Lo snippet diventa</p>
<pre class="brush: jscript; title: ; notranslate">
var _page = 1;
//[...]
jQuery(&quot;.jp-handler&quot;)
.click(function(){
//[...]
    var _id = parseInt(jQuery(this).text()) - 1;
    alert(&quot;Prima del click : &quot; + _page);
    _page = (_id + 1);
    alert(&quot;Dopo il click : &quot; + _page);

    jQuery(&quot;.jp-toolbar&quot;)
    .eq(0)
    .find(&quot;.jp-handler&quot;)
    .eq(_id)
    .addClass(&quot;jp-active&quot;);

    jQuery(&quot;.jp-toolbar&quot;)
    .eq(1)
    .find(&quot;.jp-handler&quot;)
    .eq(_id)
    .addClass(&quot;jp-active&quot;);

    _jpages.eq(_id).show();

    var _page = _id + 1;
    if(_page != 1)
        jQuery(&quot;.prev&quot;).show();
    else
        jQuery(&quot;.prev&quot;).hide();

    if(_page != _pages)
        jQuery(&quot;.next&quot;).show();
    else
        jQuery(&quot;.next&quot;).hide();

    return false;
});
</pre>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step5bug.html" target="_blank">BUG</a><br />
<a href="http://maxb.net/scripts/jpaging/tutorial/step5bug.js" target="_blank">SORGENTE</a></p>
<p>Eseguendo il codice al click su uno dei tasti vedrete che _page risponde &#8220;undefined&#8221; negando in pratica quanto visto precendentemente con _context.</p>
<p>Questo perchè subito dopo dichiaro nell&#8217;ambito della closure <strong>var _page</strong>.</p>
<p><strong>Se io voglio leggere/scrivere una variabile fuori ambito posso farlo fintanto che nello stesso ambito non venga definita una variabile con lo stesso nome.</strong></p>
<p>Come vedrete a parte il primo alert non ci sono effetti perversi. La paginazione funziona.<br />
Per evitare comunque effetti perversi difficili da scovare correggiamo il codice.</p>
<p><strong><br />
Morale (o buona pratica) : all&#8217;interno delle closure non dichiarare variabili con lo stesso nome del ambito esterno.<br />
Questo &#8220;mascheramento&#8221; infatti può produrre effetti perversi.<br />
</strong></p>
<p>A questo punto, visto il funzionamento delle variabili fuori dalle closure, e visto il bug correggiamo il codice e cancelliamo l&#8217;inutile variabile _context del primo esempio, questa volta in maniera corretta eliminando il bug.</p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step5b.html" target="_blank">CORREZIONE</a><br />
<a href="http://maxb.net/scripts/jpaging/tutorial/step5b.js" target="_blank">SORGENTE</a></p>
<p>All&#8217;interno delle closure tolgo</p>
<pre class="brush: jscript; title: ; notranslate">
var _page = _id + 1;
</pre>
<p>che non ha senso. Usiamo direttamente la variabile fuori closure che tanto deve valere l&#8217;indice _id + 1.</p>
<p>Tolta questa dichiarazione il nostro script funziona senza effetti perversi.</p>
<p>Abbiamo due contesti. </p>
<p>Il contesto del &#8220;main&#8221; che comunque non ha ambito globale essendo a sua volta all&#8217;interno della closure legata all&#8217;evento ready del documento.</p>
<p>E il contesto degli eventi sui tasti.</p>
<p>Il contesto dei tasti usa e scrive la variabile di ambito superiore del programma stesso (quello che ho chiamato il rozzo &#8220;main&#8221;).</p>
<p>Ora non ci rimane che creare un vero e proprio plugin jQuery.</p>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/08/28/imparare-jquery-9-jpaging-step-5-closure-contesti-e-visibilita/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 8 – jPaging – Step 4 : Eventi</title>
		<link>http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/</link>
		<comments>http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 09:57:07 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=128</guid>
		<description><![CDATA[post precedente : jPaging &#8211; Differenze via jQuery &#8211; 2/2 indice tutorial sorgente js di questo post demo di questo post Aggiungiamo gli eventi. Nei precedenti post abbiamo aggiunto la toolbar. Ora non ci rimane che aggiungere i comportamenti ai &#8230; <a href="http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li> <a href="http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/">post precedente : jPaging &#8211; Differenze via jQuery &#8211; 2/2</a></li>
<li> <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
<li><a href="http://maxb.net/scripts/jpaging/tutorial/step4.js" target="_blank">sorgente js di questo post</a></li>
<li><a href="http://maxb.net/scripts/jpaging/tutorial/step4.html" target="_blank">demo di questo post</a></li>
</ul>
<h3>Aggiungiamo gli eventi.</h3>
<p>Nei precedenti post abbiamo aggiunto la toolbar. Ora non ci rimane che aggiungere i comportamenti ai tasti della toolbar.</p>
<p>Partiamo dai tasti di pagina. Poi vedremo il tasto avanti e indietro.</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;.jp-handler&quot;)
.click(function(){
//qui il codice dell'evento
});
</pre>
<p>Per associare ad un link (usare sempre i link, saranno accessibili anche via tastiera) un evento usiamo la classe (jp-handler) che abbiamo inserito per interrogare facilmente il DOM, e il metodo jQuery <strong>click</strong>, <em>wrapper</em> dell&#8217;evento nativo <strong>onclick</strong>. Il metodo click della libreria jQuery accetta come argomento una funzione (<strong>closure</strong>).</p>
<p>All&#8217;interno dell&#8217;evento procediamo al nascondimento di tutte le pagine:</p>
<pre class="brush: jscript; title: ; notranslate">
_jpages.hide();
</pre>
<p><strong>NB: _jpages è visibile all&#8217;interno della closure dell&#8217;evento.Vedremo dopo uno dei primi pericoli dovuti alle closure. L&#8217;ambito e il nome delle variabile. In questo evento infatti c&#8217;è un possibile bug. </strong></p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;.jp-toolbar&quot;).find(&quot;.jp-active&quot;).removeClass(&quot;jp-active&quot;);
</pre>
<p>Rimuoviamo la classe attivo. Usiamo il metodo <strong>find</strong> che è forse il metodo più semplice e potente per ottenere nodi da un certo punto di partenza (.jp-toolbar). Il risultato di find è l&#8217;elemento/i trovato. Quindi <strong>in catena</strong> rimuovo la classe all&#8217;elemento.</p>
<p><strong>NB: imparate ad usare la <strong>chinability</strong>. A volte si parte da un &#8220;soggetto&#8221; e il soggetto rimane sempre quello nella catena. A volte il soggetto cambia come in questo caso: prima .jp-toolbar, dopo il metodo find, .jp-active.</strong></p>
<pre class="brush: jscript; title: ; notranslate">
var _id = parseInt(jQuery(this).text()) - 1;
</pre>
<p>L&#8217;id della &#8220;pagina&#8221; da mostrare è il testo del link -1. </p>
<p><strong>NB: in questo caso per la prima volta uso la parola this. this è la parola chiave del linguaggio che indica l&#8217;istanza di un oggetto in un determinato momento. In javascript bisogna fare molta attenzione ai contesti perchè this cambia a seconda del contesto.</strong>.</p>
<p>All&#8217;interno di un evento <strong>this</strong> vale sempre l&#8217;elemento a cui sto attaccando l&#8217;evento. Quindi sempre una reference di un nodo HTML.</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;.jp-toolbar&quot;)
.eq(0)
.find(&quot;.jp-handler&quot;)
.eq(_id)
.addClass(&quot;jp-active&quot;);
</pre>
<p>Le toolbar sono due. Prendo la prima </p>
<pre class="brush: jscript; title: ; notranslate">
eq(0)
</pre>
<p>Trovo i &#8220;tasti pagina&#8221;, Prendo l&#8217;elemento con indice _id e aggiungo la classe css &#8220;attivo&#8221; (jp-active). </p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;.jp-toolbar&quot;)
.eq(1)
.find(&quot;.jp-handler&quot;)
.eq(_id)
.addClass(&quot;jp-active&quot;);
</pre>
<p>Ora prendo la seconda toolbar e faccio la stessa cosa.<br />
La capacità di navigare i nodi di un documento è sicuramente la principale ragione di successo di jQuery.</p>
<pre class="brush: jscript; title: ; notranslate">
_jpages.eq(_id).show();
</pre>
<p>Mostro la pagina con indice _id.</p>
<pre class="brush: jscript; title: ; notranslate">
var _page = _id + 1;
if(_page != 1)
    jQuery(&quot;.prev&quot;).show();
else
    jQuery(&quot;.prev&quot;).hide();

if(_page != _pages)
    jQuery(&quot;.next&quot;).show();
else
    jQuery(&quot;.next&quot;).hide();
</pre>
<p>Creo una variabile locale (_page) all&#8217;ambito con il valore dell&#8217;indice maggiorato di 1 (gli array partono da 0). </p>
<p>Faccio due banali e brutti if per vedere se devo nascondere o meno i tasti prev e next.</p>
<p>Creo gli eventi per i tasti next e prev</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(&quot;.prev&quot;)
.click(function(){
//code
});

jQuery(&quot;.next&quot;)
.click(function(){
//code
});
</pre>
<p>All&#8217;interno degli eventi dei tasti next e prev il mio _id lo recupero dall&#8217;html:</p>
<pre class="brush: jscript; title: ; notranslate">
var _id = (parseInt(jQuery(&quot;.jp-toolbar&quot;).find(&quot;.jp-active&quot;).eq(0).text()) - 1);
</pre>
<p>A seconda che sia prev o next subito dopo incremento o decremento questo valore</p>
<pre class="brush: jscript; title: ; notranslate">
_id--;
</pre>
<p>Tutti gli eventi terminano con un return false per evitare che il link visiti effettivamente il target dell&#8217;attributo href. </p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step4.html" target="_blank">DEMO</a></p>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 7 – jPaging – Step 3 : Differenze via jQuery – 2/2</title>
		<link>http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/</link>
		<comments>http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 07:19:02 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://maxb.netfirms.com/blog/?p=108</guid>
		<description><![CDATA[post precedente : differenze via jQuery &#8211; 1/2 indice tutorial Aggiungiamo la toolbar per la paginazione. Per aggiungere una struttura xhtml posso usare tante tecniche. Un sistema di template sarebbe l&#8217;ideale. Perchè renderebbe più chiaro il codice xhtml. Se dovessi &#8230; <a href="http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li> <a href="http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/">post precedente : differenze via jQuery &#8211; 1/2</a></li>
<li> <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
</ul>
<h3>Aggiungiamo la toolbar per la paginazione.</h3>
<p>Per aggiungere una struttura xhtml posso usare tante tecniche.<br />
Un sistema di template sarebbe l&#8217;ideale. Perchè renderebbe più chiaro il codice xhtml.<br />
Se dovessi scegliere forse salverei un file xhtml e lo inietterei via ajax nella nostra pagina (<strong>AHAH</strong>).</p>
<p>Ma aggiungerei &#8220;troppa carne al fuoco&#8221; e soprattutto dovrei gestire la callback e la chiamata asincrona.</p>
<p>Manca una sintassi &#8220;<strong><em><a href="http://en.wikipedia.org/wiki/Heredoc">HEREDOC</a></em></strong>&#8221; stile perl/php.</p>
<p>Uso una tecnica simile:</p>
<pre class="brush: jscript; title: ; notranslate">
var _toolbar = &quot;\
&lt;div class='jp-toolbar'&gt;\
    &lt;span class='left'&gt;Page:  &lt;/span&gt;\
    &lt;span class='right'&gt;\
        &lt;span class='numbers'&gt;\
        &lt;/span&gt;\
    &lt;/span&gt;\
&lt;/div&gt;\
&quot;;
</pre>
<p>Questa variabile è stata costruita sulla base del nostro studio iniziale. Non ci sono ancora i link alle pagine. <strong>Non posso sapere a priori il numero di pagine</strong>. Ho usato gli apici singoli all&#8217;interno dei tag per rendere più chiaro il codice (altrimenti avrei dovuto &#8220;<em>escapare</em>&#8220;). </p>
<p>Ho inserito delle classi css perchè successivamente ne avrò bisogno.</p>
<p>Aggiungo la toolbar sopra e sotto il contenuto.</p>
<pre class="brush: jscript; title: ; notranslate">
  jQuery(&quot;.target&quot;).append(_toolbar);
  jQuery(&quot;.target&quot;).prepend(_toolbar);
</pre>
<p>I metodi perfetti, quelli che avresti sempre desiderato avere, senza navigare come un ubriaco il DOM! <img src='http://maxb.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tutti questi metodi (append, prepend, wrap, wrapAll li trovate nella sezione DOM della reference <a href="http://docs.jquery.com/Manipulation">jQuery</a>).</p>
<p>Aggiunta la toolbar aggiungiamo le pagine (contenitori dei record).<br />
Innanzitutto aggiungiamo una variabile provvisoria per la pagina corrente: </p>
<pre class="brush: jscript; title: ; notranslate">
var _page = 1;
</pre>
<p>Dopodichè nel ciclo che già ho scritto per navigare le pagine aggiungiamo la logica per la toolbar.<br />
Potrei dividere per chiarezza le due fasi. Due funzioni&#8230; due metodi di una classe. </p>
<p>Ma ora facciamo il &#8220;rozzo main&#8221;.</p>
<p>La programmazione è fatta di <strong>iterazioni</strong> e <strong>refactory</strong> continui del codice. Almeno io faccio così.</p>
<pre class="brush: jscript; title: ; notranslate">
if(_x==1 &amp;amp;&amp;amp; _pages &gt; 1)
    jQuery('&lt;a href=&quot;#&quot; class=&quot;prev&quot;&gt;&lt;&lt; prev&lt;/a&gt;&lt;span&gt; | &lt;/span&gt;')
    .appendTo(&quot;.jp-toolbar &gt; .right &gt; .numbers&quot;);

if(_x == _page){
    jQuery('&lt;a class=&quot;jp-handler jp-active&quot; href=&quot;#'+_x+'&quot;&gt;&lt;/a&gt;')
    .text(_x)
    .appendTo(&quot;.jp-toolbar &gt; .right &gt; .numbers&quot;)
}else{
    jQuery('&lt;a class=&quot;jp-handler&quot; href=\&quot;#'+_x+'\&quot;&gt;&lt;/a&gt;')
    .text(_x)
    .appendTo(&quot;.jp-toolbar &gt; .right &gt; .numbers&quot;);
}

jQuery(&quot;&lt;span&gt; | &lt;/span&gt;&quot;)
.appendTo(&quot;.jp-toolbar &gt; .right &gt; .numbers&quot;);

if(_x == _pages &amp;amp;&amp;amp; _pages &gt; 1)
    jQuery('&lt;a href=&quot;#&quot; class=&quot;next&quot;&gt;next &gt;&gt;&lt;/a&gt;')
    .appendTo(&quot;.jp-toolbar &gt; .right &gt; .numbers&quot;);
</pre>
<p>Cosa notare qui?</p>
<p><strong>appendTo</strong> invece di <strong>append</strong>.</p>
<p>Utilissimo. Se sono in fase di creazione <em>wrappo</em> il mio nuovo elemento con jQuery e attraverso la chinability setto tutto quello che devo settare e all&#8217;ultimo appendo l&#8217;elemento alla nostra destinazione finale.</p>
<p>Notare come cambia la <em>prospettiva</em> tra append() e appendTo(). <strong>append()</strong> lo uso quando il <em>soggetto della frase</em> è il target. Quando uso <strong>appendTo()</strong> il soggetto è solitamente un nuovo elemento e il target invece diventa l&#8217;argomento di appendTo().</p>
<p>Notare l&#8217;uso del metodo <strong>text()</strong> invece della concatenazione classica di stringhe giusto per una maggiore eleganza.</p>
<p>I <strong>selectors</strong> sono arricchiti del simbolo > che indica &#8220;<em>figli di</em>&#8221; e rende la query più specifica ad un contesto particolare. </p>
<p>Non ci rimane che nascondere le pagine e visualizzare la pagina corrente più un paio di finezze. Un operazione veramente banale con i metodi jQuery:</p>
<pre class="brush: jscript; title: ; notranslate">
 var _jpages = jQuery(&quot;.jp-page&quot;);
 _jpages.hide();
 _jpages.eq((_page - 1)).show();

 if(_page == 1)
    jQuery(&quot;.prev&quot;).hide();
 if(_page == _pages)
    jQuery(&quot;.next&quot;).hide();
</pre>
<p>Qui vediamo come abbiamo prima nascosto tutte le pagine (precedentemente create attraverso wrapAll) e poi visualizzato solo quella corrispondete all&#8217;indice (_page &#8211; 1). L&#8217;indice di un array parte da 0. La pagina corrente è la 1.</p>
<p>Notare l&#8217;uso di <strong>hide</strong>() e <strong>show</strong>() per visualizzare e nascondere un elemento. Lavorano sulla proprietà css display.</p>
<p>Notare come alcuni if sembrino inutili. La pagina iniziale è sempre 1. Perchè quegli if su prev e next?<br />
Vedremo che c&#8217;è una particolare tecnica basata sul &#8220;segnalibro&#8221; o ancora (#segnalibro) per determinare la pagina corrente.</p>
<p>Notare anche come la programmazione sia volutamente rozza e procedurale. Sto buttando giù l&#8217;algoritmo in maniera grezza. Più è brutta la prima versione e più &#8220;sarò costretto&#8221; a fare almeno una riscrittura del codice (refactory).</p>
<p>Ora possiamo passare agli eventi.</p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step3b.html" target="_blank">DEMO</a></p>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 7 – jPaging – Step 3 : Differenze via jQuery – 1/2</title>
		<link>http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/</link>
		<comments>http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 09:55:38 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[javscript]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=102</guid>
		<description><![CDATA[post precedente : template pre-js indice tutorial Nel post precedente ho tagliato dall&#8217;xhtml qualsiasi struttura utile alla sola componente js. jQuery Aggiungere, manipolare in generale, elementi html di una pagina è uno dei principali motivi di successo nel mondo, della &#8230; <a href="http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li> <a href="http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/">post precedente : template pre-js</a></li>
<li> <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
</ul>
<p>Nel post precedente ho tagliato dall&#8217;xhtml qualsiasi struttura utile alla sola componente js.</p>
<h3>jQuery</h3>
<p>Aggiungere, manipolare in generale, elementi html di una pagina è uno dei principali motivi di successo nel mondo, della libreria creata dal genio di <strong>John Resig</strong>.<br />
Una delle invenzioni più geniali che io abbia potuto veder nascere e crescere in questo mondo da quando &#8220;lo vivo&#8221;.</p>
<p>Prima odiavo il &#8220;front-end&#8221;.<br />
Il css soprattutto e le sue differenze tra browsers. Poi non conoscevo assolutamente le tecniche (gli idiomi e i pattern) avanzate del linguaggio javascript. E in ultimo non esisteva (o non conoscevo) <a href="http://www.getfirebug.com/">firebug</a>.</p>
<p>Andavo avanti a funzioni e anche li era una lotta perenne tra attributi proprietari e standard. Tra ambienti di debug minimi (mozilla/firefox) e lo zero assoluto (Explorer).<br />
Tra messaggi di errore comprensibili e assurde traduzioni in italiano (&#8220;Impossibile eseguire lo script liberato&#8221;&#8230; si certo, come no? cos&#8217;è lo script liberato?).</p>
<p>jQuery come è possibile vedere dalla sua reference è divisibile in </p>
<ul>
<li>jQuery Core</li>
<li>DOM (Selectors/Attributes/Traversing/Manipulation)</li>
<li>CSS</li>
<li>Events</li>
<li>Effects</li>
<li>Ajax</li>
</ul>
<p><a href="http://docs.jquery.com/Main_Page">jQuery Documentation</a></p>
<p>In questo post vedremo come aggiungere a runtime le differenza xhtml tra il <a href="http://maxb.net/scripts/jpaging/tutorial/step1.html">primo</a> e il <a href="http://maxb.net/scripts/jpaging/tutorial/step2.html">secondo</a> template.<br />
Tra lo studio del componente finito e la sua versione accessibile senza javascript attivo.</p>
<p>Cosa dobbiamo fare? Facciamo un minimo di analisi.</p>
<p><strong>Tralasciamo</strong> per ora le <strong>BUONE PRATICHE</strong> di programmazione javascript (terzo punto per una programmazione non intrusiva).<br />
Vediamo passo passo quali operazioni deve eseguire il nostro js: il nostro <em>rozzo &#8220;main&#8221;</em>.</p>
<ol>
<li>Noto subito che i records (
<div class="record"><!-- lorem ipsum --></div>
<p>) non sono divisi in pagine. </li>
<li> La toolbar. </li>
<li>La visualizzazione della pagina attiva e il &#8220;nascondimento&#8221; delle pagine non visibili.</li>
</ol>
<p>Procediamo per passi.</p>
<p>Innanzitutto come ho già ripetuto alla noia devo aspettare l&#8217;evento &#8220;onload&#8221;.<br />
Non ho immagini, ne operazioni da fare su di esse. (Questo però non lo posso sapere a priori, e a dire il vero qualche test con swf e oggetti esterni potrei farlo, per vedere eventuali bugs di visualizzazione).</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(document).ready(function(){

});
</pre>
<p>Ready prende come argomento una <strong>funzione</strong>.<br />
Il poter passare come argomento una funzione <em>anonima</em> è una delle funzionalità più potenti del linguaggio javascript.<br />
Il nostro programma verrà eseguito una volta che il DOM è disponibile e raggiungibile.</p>
<p>All&#8217;interno di questa <strong>closure</strong> (poi ne parlerò, ogni argomento funzione rappresenta una closure) il nostro programma ha un ambito ristretto e definito.<br />
Se non commetto &#8220;refusi&#8221; nella programmazione non avrò &#8220;globali&#8221;: una fondamentale BUONA PRATICA di programmazione non intrusiva. </p>
<p>Il refuso più diffuso è inizializzare una variabile senza var davanti. Lo chiamo refuso&#8230; perchè uno che sa, lo fa per distrazione.<br />
Secondo refuso è scrivere una cosa del genere: var a = b = 0;<br />
b è globale <strong>attenzione</strong>! Ci sono cascato.</p>
<p>Usare variabili globali diffusamente è una cattiva pratica. Secondo me un punto globale ci deve sempre essere. Ed è il &#8220;<a href="http://en.wikipedia.org/wiki/Singleton_pattern">singleton</a>&#8220;. Ma c&#8217;è chi sostiene che anche questa sia una cattiva pratica. O mi sfugge qualcosa, o loro non hanno forse mai programmato.</p>
<blockquote><p>
In software engineering, the singleton pattern is a design pattern that is used to restrict instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. Sometimes it is generalized to systems that operate more efficiently when only one or a few objects exist. It is also considered an anti-pattern by some people, who feel that it is often used as a euphemism for global variable. &#8211; da <a href="http://en.wikipedia.org/wiki/Singleton_pattern">wikipedia</a></p></blockquote>
<h3>Passo 1 &#8211; Dividere in pagine i record</h3>
<p>Dividiamo inizialmente in blocchi da 3 record le pagine e &#8220;wrappiamo&#8221; (racchiudiamo, inglobiamo) 3 record all&#8217;interno di un div (contenitore)  &#8220;pagina&#8221;.</p>
<pre class="brush: jscript; title: ; notranslate">
  var _records = jQuery(&quot;.record&quot;);
  var _per_pagina = 3;
  var _pages = Math.ceil(_records.size() / _per_pagina);
  for(var _x= 1;_x &lt;= _pages; _x++){
    //wrap
    var _page_start = (_x - 1) * _per_pagina;
    var _page_stop = _page_start + _per_pagina;
    var _slice = _records.slice(_page_start, _page_stop);
    _slice.wrapAll('&lt;div class=&quot;jp-page&quot; id=&quot;page-'+_x+'&quot; /&gt;');
  }
</pre>
<p>*<strong>cerco di scrivere sempre i nomi di variabili in inglese &#8211; mi è sfuggito _per_pagina</strong></p>
<p>Testiamo il codice con <a href="http://www.getfirebug.com/">firebug</a>. Vediamo se scatena eccezioni. Nel tab html (di firebug, o altrimenti tramite webdevolperbar, sempre firefox, View Source -> View generated source, o altrimenti sempre con firefox, seleziona tutto -> tasto destro -> vedi selezione)  è possibile vedere il codice generato. </p>
<p>Ho aggiunto classe e id alla pagine perchè so già che ne avrò bisogno per gli eventi. </p>
<p>Le variabili con l&#8217;underscore davanti stanno a indicare che sono private ad un ambito. </p>
<p>Questione di stile (ma anche di buone pratiche, non tutti hanno a disposizione la chiarezza sintattica di java, e a volte può essere una vera fortuna). </p>
<p>Liberi di fare un po&#8217; quello che preferite. Io in questo modo vedo le variabili che arrivano dall&#8217;esterno di un ambito (arguments) o le variabili globali (se mai ce ne dovessero essere) o le proprietà/attributi che stabilisco essere pubbliche (perchè c&#8217;è il modo di stabilire la visibilità in javascript, solo che lo vedremo in un altro tutorial).</p>
<p>Sottolineo un paio di passaggi dello &#8220;snippet&#8221; precendente jQuery.</p>
<h3>jQuery(selector);</h3>
<p>La <strong>query</strong> innanzitutto: jQuery(&#8220;.record&#8221;); </p>
<p>Non uso mai il $.<br />
jQuery può essere usato via <strong>alias</strong> $.</p>
<ul>
<li>Io spesso lavoro in ambiti dove si usa <a href="http://prototypejs.org/">prototype</a>&#8230; non voglio problemi di conflitti.</li>
<li>E poi il dollaro mi ricorda altro. Il php. Ed ha un altro senso il dollaro nel php.</li>
<li>E con un search&#038;replace posso sempre aggiungerlo.</li>
<li>E google registra che qui si parla di jQuery. Ed è un bene.</li>
</ul>
<p><strong>.record è un selettore css.</strong> </p>
<p>Si usa per le <em>interrogazioni</em> jQuery esattamente come nel css viene usato per applicare lo stile.<br />
E&#8217; il tipo di selezione più diffuso e semplice. Ne esistono altri (xPath) più complessi da leggere e da applicare ma anche più potenti.</p>
<p>La query restituisce gli oggetti jQuery che &#8220;wrappano&#8221; le references html.</p>
<p>Per chi viene dal DOM classico:<br />
invece di avere il risultato di un document.getElementByTagName (o byID o con estensione byClassName) fatto di nodi HTML, attraverso interrogazione jQuery ho lo &#8220;stesso risultato&#8221;, ma fatto di oggetti jQuery. Chiaro?</p>
<p>Con un nodo HTML potrei fare risultato.id per ottenere l&#8217;ID del nodo o setAttribute per settare un nuovo attributo al nodo. Con l&#8217;oggetto jQuery posso fare le stesse cose usando i metodi jQuery o posso fare le native operazioni DOM con</p>
<p>jQuery(risultato).get(0).id</p>
<p>Quindi con il metodo get() ottengo la reference HTML. 0 può essere sottointeso.</p>
<p>Capire questo è fondamentale per proseguire.</p>
<p>DIMENTICATEVI l&#8217;implementazione nativa del DOM e tutti i suoi problemi. Almeno io non la voglio più vedere. Nonostante sia uno standard (in teoria) qualche multinazionale mi ha fatto odiare l&#8217;implementazione nativa.<br />
E poi mi sento dire dai  Programmatori filo-microsoft che IO non sono professionale!<br />
Potevano prima di criticare me, insegnare loro la lettura di documenti di standard? RFC e quant&#8217;altro.</p>
<h3>jQuery(selector).slice();</h3>
<p>Ho usato il metodo <strong>slice</strong> (jQuery) per avere una porzione di nodi dall&#8217;array restituito dalla selezione (dal record x al record y).</p>
<h3>jQuery(selector).wrapAll();</h3>
<p>E il metodo <strong>wrapAll</strong> che permette di <em>wrappare</em> (racchiudere, inglobare) appunto gli elementi selezionati con un nodo (o più)  html.</p>
<p>Il metodo <strong>wrap</strong> avrebbe aggiunto ad ogni singolo elemento restituito da slice il codice html, quindi invece di avere un div page a contenere 3 record avrei avuto un div page a contenere ogni singolo record (e non serviva a niente).</p>
<h3>jQuery(selector).size();</h3>
<p>Il metodo size permette di avere il numero di elementi ottenuti dalla selezione jQuery. </p>
<p>Ecco la </p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step3.html" target="_blank">DEMO</a></p>
<p>e qui il codice generato da queste prime 5 righe di codice js:</p>
<p>Da:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;target&quot;&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>A:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;target&quot;&gt;
    &lt;div id=&quot;page-1&quot; class=&quot;jp-page&quot;&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;page-2&quot; class=&quot;jp-page&quot;&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;page-3&quot; class=&quot;jp-page&quot;&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;page-4&quot; class=&quot;jp-page&quot;&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
        &lt;div class=&quot;record&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 6 – jPaging – Step 2 : Template pre-js</title>
		<link>http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/</link>
		<comments>http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 08:26:46 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[javscript]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=101</guid>
		<description><![CDATA[post precedente : Studio UI indice tutorial Nell&#8217;esempio precedente abbiamo visto il componente &#8220;finito&#8221;. Non funzionante. Ma visivamente come dovrebbe essere alla fine del nostro processo di sviluppo. La paginazione, la pagina attiva, i pulsanti avanti e indietro (visibili o &#8230; <a href="http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/">post precedente : Studio UI</a></li>
<li> <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
</ul>
<p>Nell&#8217;esempio precedente abbiamo visto il componente &#8220;finito&#8221;. Non funzionante. Ma visivamente come dovrebbe essere alla fine del nostro processo di sviluppo.</p>
<p>La paginazione, la pagina attiva, i pulsanti avanti e indietro (visibili o meno).</p>
<p>Per programmare in maniera intrusiva bisogna rispettare il principio del &#8220;<a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">Graceful degradation</a>&#8220;.<br />
Io devo AGGIUNGERE una funzionalità. Aggiungerla a &#8220;runtime&#8221; sull&#8217;evento load.<br />
Devo garantire una base visibile e accessibile a chiunque, anche ai browsers (o ai bot/spiders) non dotati di engine js.</p>
<p>Vediamo come ripensare il template precedente senza paginazione javascript, o meglio senza javascript.<br />
La toolbar è chiaramente inutile ad un utente senza javascript : cosa se ne farebbe?</p>
<p>Questo esempio è veramente banale. Altri compoenenti UI sono più difficili da pensare e studiare nei due stati (js e nojs).</p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step2.html" target="_blank">DEMO</a></p>
<p>XHMTL:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;target&quot;&gt;
  &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;!-- etc --&gt;
&lt;/div&gt;
</pre>
<p>Conclusione: il template statico deve essere questo. NON quello dello studio UI del post precendente.<br />
Vedremo come aggiungere tutto quello che è &#8220;js&#8221; via js stesso.</p>
<p><strong>Aggiungi via js, l&#8217;interfaccia js e i suoi stili (oltre che le funzionalità).</strong></p>
<p>Seguendo questo principio, motori di ricerca,  browsers testuali, e dispositivi mobili leggeranno perfettamente tutte le nostre pagine. &#8220;Male che vada&#8221; arriveranno all&#8217;informazione. </p>
<p>In questo esempio l&#8217;unico svantaggio dell&#8217;utente (o agente) senza js (e non è detto che sia uno svantaggio) sarà quello di dover scorrere la pagina. </p>
<p>Le informazioni verranno perfettamente indicizzate. </p>
<p>Il tutorial è destinato a chi vuole avvicinarsi al mondo javascript e in particolare alla libreria jQuery.<br />
La paginazione lato-client presenta vantaggi e svantaggi.<br />
Ma non sta a me definirli.</p>
<p>[... continua]</p>
<p>PS: troppo semplice questo post. passiamo al successivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 5 – jPaging – Step 1 : Studio UI</title>
		<link>http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/</link>
		<comments>http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 09:43:09 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[javscript]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=95</guid>
		<description><![CDATA[indice tutorial Il componente è stato progettato e disegnato in html/css. Lo &#8220;storyboard&#8221; è più o meno questo: Qualcuno ha pensato che un componente per la paginazione client-side possa essere utile Qualcuno ha dato incarico al settore grafico/impaginazione web di &#8230; <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">indice tutorial</a></li>
</ul>
<p>Il componente è stato progettato e disegnato in html/css.<br />
Lo &#8220;storyboard&#8221; è più o meno questo:</p>
<ol>
<li>Qualcuno ha pensato che un componente per la paginazione client-side possa essere utile</li>
<li>Qualcuno ha dato incarico al settore grafico/impaginazione web di creare un template statico con css allegato del componente (il pattern html)</li>
<li>Qualcuno arriva dal programmatore javascript/jquery per la creazione di un plugin che permetta velocemente e facilmente di aggiungere una paginazione client-side basata su questo template alle webapp e ai siti dell&#8217;azienda</li>
<li>Il componente deve essere facile da configurare e riusare, e deve essere slegato dal design particolare di un progetto.</li>
</ol>
<p>Il template in questo caso è proprio solo un esempio.<br />
Ripeto ci sarà veramente un css basilare.<br />
Sarà possibile applicare una &#8220;skin&#8221; cambiando il css.</p>
<p>Il codice xhtml si basa su questa struttura. </p>
<pre class="brush: xml; title: ; notranslate">

&lt;div class=&quot;target&quot;&gt;
  &lt;div class=&quot;jp-toolbar&quot;&gt;
    &lt;span class=&quot;left&quot;&gt;Page:  &lt;/span&gt;
    &lt;span class=&quot;right&quot;&gt;
      &lt;span class=&quot;numbers&quot;&gt;
      &lt;a style=&quot;display: none;&quot; href=&quot;#&quot;&gt;&amp;amp;lt;&amp;amp;lt; prev&lt;/a&gt;
      &lt;span&gt; | &lt;/span&gt;
      &lt;a class=&quot;jp-active&quot; href=&quot;#1&quot;&gt;1&lt;/a&gt;
      &lt;span&gt; | &lt;/span&gt;
      &lt;a href=&quot;#2&quot;&gt;2&lt;/a&gt;
      &lt;span&gt; | &lt;/span&gt;
      &lt;a href=&quot;#3&quot;&gt;3&lt;/a&gt;
      &lt;span&gt; | &lt;/span&gt;
      &lt;a href=&quot;#4&quot;&gt;4&lt;/a&gt;
      &lt;span&gt; | &lt;/span&gt;
      &lt;a href=&quot;#&quot;&gt;next &amp;amp;gt;&amp;amp;gt;&lt;/a&gt;
    &lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: block;&quot;&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: none;&quot;&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: none;&quot;&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
      &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;display: none;&quot;&gt;
    &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
    &lt;div class=&quot;record&quot;&gt;&lt;!-- lorem ipsum --&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;!-- toolbar again --&gt;
  &lt;div class=&quot;jp-toolbar&quot;&gt;
  &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Non è detto che sia definitivo. jQuery ci potrebbe in un certo senso imporre per questioni di velocità di aggiungere classi o id per reperire in maniera più semplice gli elementi.<br />
Gli stili inline sono come punti provvisori di un orlo di un pantalone.<br />
Servono solo ora per progettare correttamente il comportamento js.</p>
<p><a href="http://maxb.net/scripts/jpaging/tutorial/step1.html" target="_blank">DEMO</a></p>
<p>Ho creato 4 pagine (pagine di una paginazione).<br />
1 sola è visibile. (ovvio)<br />
La toolbar è presente sopra e sotto.<br />
Il container e i record hanno una classe per definirne uno stile via css.<br />
La paginazione ha due tasti extra per andare avanti e indietro.<br />
Non ci sono meccanismi complessi di carrelli e visibilità di un blocco di pagine.</p>
<p>Il css per questo template è basico:</p>
<pre class="brush: css; title: ; notranslate">
body{font-size:75%;}

.jp-toolbar{ margin:auto;text-align:right; width: 90%;}
.jp-active, a.jp-active:active, a.jp-active:link{ color:#FAA912; font-size:1.2em; font-weight:bold;}

.record{

    width: 90%;
    border: 1px dashed #000;
    margin: auto;
    color:#000;
    padding:3px;
}
.container{
    margin:auto;
    border: 3px dashed #000;
    padding:2px;
}
</pre>
<p>Questo esempio è ripeto solo uno studio del componente UI nel suo stadio finale.<br />
Non è definitivo, non è detto che ci sia tutto il necessario.</p>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Imparare jQuery – 4 – jPaging – Introduzione</title>
		<link>http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/</link>
		<comments>http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 09:22:14 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jpaging]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=94</guid>
		<description><![CDATA[&#8230; continua da Carlo sostiene che i primi 3 post sono stati un po&#8217; facilotti anche per lui&#8230; Facciamo questa paginazione lato-client. Suddividiamo il processo in una serie di passaggi. L&#8217;estetica vi dico subito la lascio ai grafici. Il componente &#8230; <a href="http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#8230; <a href="http://maxb.net/blog/2008/06/26/imparare-jquery-3-windowonload/">continua da</a></p>
<p><a href="http://perassi.org/" target="_blank">Carlo</a> sostiene che i primi 3 post sono stati un po&#8217; facilotti anche per lui&#8230;</p>
<p>Facciamo questa paginazione lato-client.</p>
<p>Suddividiamo il processo in una serie di passaggi.<br />
L&#8217;estetica vi dico subito la lascio ai grafici.<br />
Il componente più è slegato dal design e più è riusabile.</p>
<p>Un piccolo indice per il tutorial:</p>
<ul>
<li><a href="http://maxb.net/blog/2008/06/30/imparare-jquery-5-jpaging-step-1-studio-ui/">Studio del componente UI</a></li>
<li><a href="http://maxb.net/blog/2008/07/01/imparare-jquery-6-jpaging-step-2-template-pre-js/">Template pre-js</a></li>
<li>Differenze applicate via jQuery (<a href="http://maxb.net/blog/2008/07/01/imparare-jquery-7-jpaging-step-3-differenze-via-jquery1/">1</a> e <a href="http://maxb.net/blog/2008/07/18/imparare-jquery-7-jpaging-step-3-differenze-via-jquery2/">2</a>)</li>
<li><a href="http://maxb.net/blog/2008/08/28/imparare-jquery-8-jpaging-step-4-eventi/">Eventi</a></li>
<li><a href="http://maxb.net/blog/2008/08/28/imparare-jquery-9-jpaging-step-5-closure-contesti-e-visibilita/">Closure contesti e visibilità</a></li>
<li>Creazione plugin</li>
<li>jQuery Chinability</li>
<li>Expando</li>
<li>Refactory</li>
<li>Opzioni e agganci con l&#8217;html</li>
<li>History e pagina iniziale</li>
</ul>
<p>Via via aggiungerò a questo elenco i link ai post. Anche se sono praticamente pronti lascerò il tempo ai lettori di leggere masticare, e commentare. </p>
<p>[... continua]</p>
]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2008/06/30/imparare-jquery-4-jpaging-introduzione/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

