 
 
 <?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>upCreative &#187; mobile app</title>
	<atom:link href="https://www.upcreative.net/tag/mobile-app/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.upcreative.net</link>
	<description>Web Design, grafica,  web application e content web marketing</description>
	<lastBuildDate>Wed, 10 Apr 2019 12:53:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Creare un app: ne hai veramente bisogno?</title>
		<link>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/</link>
		<comments>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/#comments</comments>
		<pubDate>Thu, 10 Jul 2014 14:12:20 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[creare un app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4070</guid>
		<description><![CDATA[<p>La maggior parte delle applicazioni mobile viene scaricata per poi non essere mai più utilizzata, o addirittura rimossa dal dispositivo appena dopo essere stata lanciata per la prima volta. Ciò è dovuto per la maggior parte dei casi all'inutilità dell'app stessa. Prima di creare un app è bene capire se ne hai effettivamente bisogno.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/">Creare un app: ne hai veramente bisogno?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Ogni anno vengono effettuati <b>miliardi di download </b>di applicazioni mobile da milioni di utenti sparsi per il mondo, ad un punto tale che molti paragonano il creare un app e pubblicarla nei vari stores ad una vera propria miniera d’oro. Ed il numero sta crescendo a dismisura.</p>
<p><img class="alignnone wp-image-4074 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/07/Mobile-app-download.jpg" alt="Mobile app download" width="960" height="684" /></p>
<p style="text-align: center;"><i>La stima dei numero di download di applicazioni mobile nei prossimi anni</i></p>
<p>Tuttavia, se in alcuni casi gli app stores hanno rappresentato (e rappresentano ancora) una grandissima fonte di ricchezza (come <a href="https://itunes.apple.com/it/app/ruzzle/id504265646?mt=8">Ruzzle</a> o <a href="http://it.wikipedia.org/wiki/Flappy_Bird">FlappyBird</a>, tanto per citare le prime app che mi vengono in mente), per ogni app di successo ce ne sono migliaia che non riescono a decollare.</p>
<p>Il fatto è che quando si parla di <strong>creare un app,</strong> puntualmente ci vengono presentati solamente quei progetti che hanno raggiunto la vetta. E tutte quelle applicazioni che al contrario hanno fallito?</p>
<h2>La dura verità: le app che non hanno successo</h2>
<p>In particolare, di tutti i milioni di applicazioni scaricate, <b>solo un piccolissima parte (circa il 5/10%) viene effettivamente utilizzata dopo la prima volta</b>.</p>
<p>Quante volte ti sarà capitato di scaricare un’app nel tuo smartphone o tablet, dargli un’occhiata veloce, per poi non aprirla mai più, o addirittura cancellarla?</p>
<p><img class="alignright wp-image-4073 " src="http://www.upcreative.net/wp-content/uploads/2014/07/aggiornamenti-mobile-app-168x300.jpg" alt="aggiornamenti mobile app" width="185" height="330" /></p>
<p>A seconda dell’utente, la maggior parte delle applicazioni vengono completamente ignorate o cancellate dopo il primo utilizzo.</p>
<p>Il mio iPhone è continuamente colmo di applicazioni di vario tipo, ed ogni giorno mi presenta minimo 50 notifiche di aggiornamenti da effettuare per applicazioni che non ricordo nemmeno di avere.</p>
<p>Così, periodicamente, appena riesco a ritagliarmi un attimo di tempo, mi metto a cancellare tutte quelle app che non mi piacciono o che non utilizzo.</p>
<p>Ma dopo qualche giro di esplorazione su App Store, sono di nuovo al punto di partenza.</p>
<p>E credo che questo sia lo stesso scenario della maggior parte degli utenti che possiedono un dispositivo mobile.</p>
<p>Da cosa dipende?</p>
<p>Semplice: dall’<b>utilità dell’applicazione.</b></p>
<p style="text-align: center;"><b>Prima di perdere tempo con la creazione di un’applicazione, cerca di capire se è effettivamente utile</b></p>
<h2>Verifica l’utilità della tua applicazione</h2>
<p><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/07/utilita-Mobile-app.jpg"><img class="alignright size-full wp-image-4075" src="http://www.upcreative.net/wp-content/uploads/2014/07/utilita-Mobile-app.jpg" alt="utilita Mobile app" width="300" height="510" /></a></p>
<p>Molti vengono a chiederemi delle consulenze per progetti riguardanti applicazioni mobile che risultano veramente inutili, come se si dimenticassero che qualsiasi smartpthone o tablet possiede un browser.</p>
<p>Ora ti chiederai: “<i>cosa c’entra il browser con l’app?</i>”</p>
<p>C’entra eccome.</p>
<p>Uno dei miei clienti (per il quale ho realizzato un <a href="http://yithemes.com/product-tag/ecommerce/">e-commerce con WordPress</a>) sapendo che oltre a siti ed applicazioni web mi occupo anche della realizzazione di mobile app,  qualche tempo fa si era fissato con l’idea di voler creare a tutti i costi un’applicazione mobile che offrisse all’utente tutte le funzionalità dell’e-commerce che gli avevo già sviluppato.</p>
<p><b>Che senso avrebbe avuto realizzare l’applicazione di un’e-commerce già ottimizzato per dispositivi mobile, e quindi già facilmente fruibile da un normale mobile browser?</b></p>
<p>Provai a spiegargli l’inutilità della cosa, ma non mollò la presa, nemmeno dopo avergli mostrato il mio preventivo.</p>
<p>Morale: il cliente finì per spendere alcune migliaia di euro per un’ottima e funzionale applicazione, ma che non venne mai utilizzata da nessuno (dei circa 900 utenti che avevano effettuato il download nell’arco di un anno, non registrammo nemmeno un acquisto da dispositivi mobili).</p>
<p><b>Completo fallimento</b>.</p>
<p>Pensaci bene: prima di metterti a testa bassa e impegnarti nella realizzazione di un’applicazione mobile, cerca di capire quali funzionalità e contenuti deve avere.</p>
<p>Se si tratta di elementi disponibili anche su un normale web browser, allora la verità è che <b>non hai bisogno di un’applicazione mobile</b>, o almeno di un’applicazione da distribuire sui vari stores.</p>
<p>Molte delle funzionalità come la <i>geolocalizzazione</i> o il <i>salvataggio dei dati</i> (leggi <a href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/#more-50357">questo articolo </a>oppure <a href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">questo</a> per saperne di più) possono essere implementate anche in normali siti web.</p>
<p>Una buona soluzione che personalmente adotto molto spesso è quella di creare <b>una versione mobile del sito web</b>, utilizzando delle tecniche per realizzare <a href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile app fluide ed altamente performanti</a>.</p>
<p>In questo modo è possibile creare un’applicazione mobile a tutti gli effetti, ma che sia accessibile anche da un normale browser mobile, e che allo stesso tempo possa essere facilmente trasformata in un’<b>applicazione ibrida, </b>grazie adei tools come <a href="http://phonegap.com/">Phonegap</a> o <a href="http://www.appcelerator.com/titanium/">Titanium</a>.</p>
<p>È la stessa cosa che ha fatto per esempio <i>Financial Times </i>con la <a href="http://apps.ft.com/ftwebapp/index.html">sua applicazione mobile</a>.</p>
<h2>Conclusioni: in base a quali fattori puoi capire se tu o il tuo cliente avete veramente bisogno di un app?</h2>
<p>Per capire se hai veramente bisogno di creare un’applicazione da poter scaricare nei vari stores, i metri di giudizio ai quali dovresti affidarti e su cui focalizzarti sono:</p>
<ol>
<li>posso fornire all’utente le stesse funzionalità con un normale sito web responsive?</li>
<li>quanto tempo, risorse e denaro dovrei impiegare per creare un app e quali per creare un sito web che offra le stesse funzionalità?</li>
<li>qual è lo scopo finale (effettivo) del tuo progetto/lavoro?</li>
<li>quali sono le reali esigenze dell’utente?</li>
</ol>
<p>Più semplicemente, se hai bisogno di offrire un prodotto che deve essere accessibile da diversi tipi di dispositivi (sia da quelli desktop che da quelli quelli mobili) allora la miglior cosa è sicuramente optare per una <b>versione responsive del sito web</b>.</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu sei un web designer come me e vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2611636493-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2611636493-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/">Creare un app: ne hai veramente bisogno?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/creare-un-app-ne-veramente-bisogno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</title>
		<link>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/</link>
		<comments>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/#comments</comments>
		<pubDate>Fri, 13 Jun 2014 13:34:03 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[facebook mobile login]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4046</guid>
		<description><![CDATA[<p>Phonegap/Cordova permette di integrare il Facebook mobile login in un'applicazione ibrida realizzata in HTML5, CSS3 e Javascript permettendo l'accesso ai controlli nativi del dispositivo, grazie ad una combinazione del Facebook SDK nativo e di quello Javascript. Tuttavia questo metodo è limitato alle applicazioni che saranno poi compilate sotto forma di app nativa. In questo articolo ti mostro una risorsa alternativa per implementare il login di Facebook in qualsiasi applicazione HTML5.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/">Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nei vari app stores possiamo trovare un numero sempre più grande di <strong>applicazioni che integrano il login di Facebook</strong> al proprio interno per dare la possibilità all&#8217;utente di effettuare l&#8217;accesso molto più comodamente e velocemente, evitando di costringerlo ad iscriversi ad un nuovo servizio, con tutti i rischi che tale operazione comporta (come per esempio perdere una grande fetta di utenti).</p>
<p>Per aggiungere questa funzionalità nei miei progetti da pubblicare come applicazioni ibride (mobile app in HTML5 &#8220;inglobate&#8221; all&#8217;interno di app native), ho sempre utilizzato il plugin Phonegap &#8220;<em><strong><a title="Phongap facebook plugin" href="https://github.com/phonegap/phonegap-facebook-plugin">Phonegap Facebook Plugin</a>&#8220;, </strong></em>che<em><strong> </strong></em>utilizza una combinazione dei &#8220;moduli&#8221; nativo e javascript messi a disposizione dall&#8217;SDK di Facebook.</p>
<p>Grazie al <em>Facebook Plugin di Phonegap</em> è quindi possibile &#8220;manovrare&#8221; il login nativo mediante delle semplici API javascript.</p>
<p>&nbsp;</p>
<p><img class="aligncenter wp-image-4054 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login.jpg" alt="Facebook-mobile-login" width="690" height="400" /></p>
<p>In fondo è proprio questo lo scopo dei plugin per Phonegap, ed anche un dei vantaggi di sviluppare mobile app in HTML5: quello di riuscire ad <strong>accedere alle funzionalità native del dispositivo direttamente da codice Javascript</strong>.</p>
<p>Tuttavia questa strada porta <strong>alcuni svantaggi</strong>, come quello di dover comunque dipendere da un plugin di terze parti, oppure quello di non poter essere utilizzato nel caso in cui non volessimo distribuire la nostra applicazione HTML5-CSS3-Javascript sotto forma di app ibrida (compilandola quindi con strumenti come Xcode o Eclipse), ma volessimo renderla accessibile in remoto, collegandosi semplicemente ad una pagina web (come per esempio hanno fatto <a title="Financial Times mobile app" href="http://apps.ft.com/">Financial Times</a> e <a title="Forecast.io - Meteo HTML5 Mobile App" href="http://forecast.io/">Forecast.io</a> con le loro HTML5 mobile app, vedi immagine seguente).</p>
<p>&nbsp;</p>
<p><img class="aligncenter wp-image-4055 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/HTML5-mobile-apps.jpg" alt="HTML5-mobile-apps" width="690" height="400" /></p>
<p style="text-align: center;"><em>Le applicazioni HTML5 ottimizzate per mobile di Financial Times e Forecast.io</em></p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: una strada alternativa</h2>
<p>In questo articolo ti voglio mostrare una risorsa molto interessante, che ho trovato utilissima  per poter <strong>implementare un Facebook mobile login su di un&#8217;HTML5 mobile app senza necessariamente utilizzare dei tools nativi,</strong> come il plugin per Phonegap sopra citato.</p>
<p>Si tratta di una micro-libreria Javascript realizzata da <a style="font-weight: bold; color: #222222;" href="http://coenraets.org/blog/bio/">Christophe Coenraets</a>, brillante sviluppatore professionista che lavora per <span style="color: #444444;">Salesforce.com (ti consiglio vivamente di seguirlo, se sei interessato a <a title="Html Mobile Accelerato - Come creare un app in HTML5, CSS3 e Javascript" href="http://www.upcreative.net/html-mobile-accelerato/">come creare un app in HTML5, CSS3 e Javascript</a>), il cui lavoro è principalmente focalizzato sullo sviluppo di applicazioni mobile <em>web-based</em> ( quindi <em>single-page-application</em>).</span></p>
<p>La libreria si chiama <strong>OpenFB</strong> e risulta molto utile per poter implementare il Facebook mobile login sulla propria applicazione, senza affidarsi necessariamente a dei componenti nativi.</p>
<p>Coenraets, che avendo la necessità di implementare questa funzionalità in uno dei suoi lavori ha pensato di adattarla in una soluzione standard in modo tale che tutti potessero usufruirne, ha dato la possibilità a chiunque di inserire facilmente il login di Facebook nel proprio progetto.</p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: come si usa la libreria OpenFB</h2>
<p>Utilizzare la libreria si presenta piuttosto semplice, vediamo come funziona:</p>
<p>Semplice Login:</p><pre class="crayon-plain-tag">openFB.login(scope, successHandler, errorHandler);</pre><p>
Riprendere la lista degli amici dell&#8217;utente:</p><pre class="crayon-plain-tag">openFB.api({path: '/me/friends', success: successHandler, error: errorHandler});</pre><p>
Pubblicare un post nella bacheca dell&#8217;utente:</p><pre class="crayon-plain-tag">openFB.api(
{
     method: 'POST',
     path: '/me/feed',
     params: {
          message: 'Messaggio di prova per le API di Facebook'
     },
     success: successHandler,
     error: errorHandler
});</pre><p>
<h3><img class="aligncenter wp-image-4052 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login-API.jpg" alt="Facebook-mobile-login-API" width="690" height="400" /></h3>
<h3>Facebook mobile login: primi passi</h3>
<p>Per integrare la risorsa nei tuoi progetti hai solamente bisogno di:</p>
<ol>
<li>Creare un&#8217;applicazione Facebook da associare al tuo progetto recandoti a <a href="https://developers.facebook.com/apps">questo link</a></li>
<li>Copiare l&#8217;ID dell&#8217;applicazione Facebook appena creata ed usarlo come primo parametro della funzione di inizializzazione della libreria OpenFB posta nella pagina principale della tua <em>Single Page Application </em>(<em>index.html</em>): <span style="color: #444444;"><em>openFB.init()</em>.</span></li>
<li>Eseguire la pagina <em>index.html</em> da un indirizzo che corrisponda a quello inserito al momento della creazione dell&#8217;applicazione Facebook, in corrispondenza del parametro &#8220;<em><span style="color: #4e5665;">Valid OAuth redirect URIs</span></em>&#8221; situato nella scheda &#8220;<em>Settings&#8221;</em>.</li>
</ol>
<p><img class="aligncenter wp-image-4053 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/Facebook-mobile-login-URI.jpg" alt="Facebook-mobile-login-URI" width="690" height="467" /></p>
<hr />
<p><em>#facebook #mobileapp login &#8211; Come implementarlo in #HTML5</em><br /><a href='https://twitter.com/share?text=%23facebook+%23mobileapp+login+-+Come+implementarlo+in+%23HTML5&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Facebook mobile login: conclusioni</h2>
<p>Come vedi il funzionamento è piuttosto semplice, e chiunque può facilmente integrarlo nella propria applicazione, app che non deve essere necessariamente distribuita sotto forma di app ibrida/nativa ma che può essere benissimo pubblicata online.</p>
<p>Infatti l&#8217;autore della libreria mette a disposizione anche la demo di un&#8217;applicazione-base che puoi consultare per capire meglio come integrare OpenFB nella tua <em>Single Mobile Application; </em>la demo che funziona anche se visualizzata con un normale browser, sia mobile che desktop.</p>
<p>In particolare, la libreria è stata pensata per fare in modo che il Facebook mobile login funzioni sia nel caso in cui il progetto preveda l&#8217;utilizzo di Phonegap (quindi nel caso di un&#8217;applicazione ibrida), sia nel caso di applicazioni &#8220;<em>browser-based</em>&#8220;: se eseguita con Cordova essa sfrutta una web view nativa, mentre se eseguita su browser, il login sarà mostrato attraverso una finestra di popup.</p>
<p>Io l&#8217;ho già implementata in una mia applicazione, e la trovo molto utile.</p>
<p>Ma mi piacerebbe sapere il tuo parere: cosa ne pensi?</p>
<p>Fammelo sapere nei commenti!</p>
<p>PS. Quasi dimenticavo: ecco <strong>il link all&#8217;ottimo ed utilissimo articolo originale di Coenraets, ai sorgenti e alla demo</strong>:</p>

		</div> 
	</div> <div class="g-cols"><div class="one-third"><div class="wpb_button align_center"><a href="http://coenraets.org/blog/2014/04/facebook-phonegap-cordova-without-plugin/"class="g-btn type_primary"><span>LINK ALL'ARTICOLO</span></a></div>
</div><div class="one-third"><div class="wpb_button align_center"><a href="https://github.com/ccoenraets/OpenFB"class="g-btn type_primary"><span>SORGENTI LIBRERIA</span></a></div>
</div><div class="one-third"><div class="wpb_button align_center"><a href="http://coenraets.org/apps/openfb/index.html"class="g-btn type_primary"><span>DEMO</span></a></div>
</div></div><div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu sei un web designer come me e vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2611648de1-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2611648de1-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/">Facebook mobile login: come integrarlo in un&#8217;applicazione HTML5</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/facebook-mobile-login-come-integrarlo-in-unapplicazione-html5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Come creare un app mobile: HTML5 o linguaggio nativo?</title>
		<link>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/#comments</comments>
		<pubDate>Fri, 06 Jun 2014 11:46:55 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[come creare un app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iOS8]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=4025</guid>
		<description><![CDATA[<p>Come creare un app: quale linguaggio dovrei usare, HTML5 o i linguaggi nativi? Si tratta di un dibattito che è sempre esistito fin dalla nascita dei dispositivi mobile; ma la realtà è che non c'è una risposta che si adatta a tutti e a tutto. In questo articolo analizzo quali sono i principali fattori in base ai quali dovresti decidere la strada più opportuna da intraprendere.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/">Come creare un app mobile: HTML5 o linguaggio nativo?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Uno dei dilemmi più frequenti su cui si imbatte chiunque decida di affacciarsi sul mondo dello sviluppo mobile è sicuramente quello su <strong>come creare un app</strong>: &#8220;<em><strong>quale sistema di sviluppo dovrei adottare? E&#8217; meglio cominciare con il codice nativo oppure affidarsi</strong></em><strong> all&#8217;HTML?</strong>&#8220;.</p>
<p>In effetti è una domanda che i miei lettori mi pongono molto frequentemente.</p>
<p>Come avrai notato personalmente prediligo la via dell&#8217;HTML5, CSS3 e Javascript per realizzare i miei progetti destinati a dispositivi mobile. Ma quella che per me è la strada principale, non è detto che lo debba essere per gli altri sviluppatori.</p>
<p>Ognuno, durante il proprio percorso formativo/professionale, capita davanti a situazioni ed ostacoli differenti, una miriade di combinazioni che lo portano a prendere determinate decisioni invece che altre.</p>
<p>E&#8217; così anche per quanto riguarda la decisione sul linguaggio da utilizzare per realizzare una mobileapp.</p>
<p>La risposta non è delle più semplici, ma dipende da numerosi fattori. In questo articolo vedremo quali secondo me dovresti considerare per prendere la tua decisione.</p>
<p><img class="aligncenter wp-image-4032 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/mobile-app-linguaggio-web-o-nativo-.png" alt="mobile-app-linguaggio-web-o-nativo-" width="690" height="398" /></p>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Il settore di provenienza</h2>
<p>La cosa incide maggiormente sulla decisione da prendere per quanto riguarda la metodologia di sviluppo di una mobile app è dal mio punto di vista il <strong>settore professionale</strong> al quale apparteniamo.</p>
<p>Se non sei un ragazzo che è appena uscito da scuola o dall&#8217;università e vuole iniziare a crearsi una carriera nel mondo delle mobile app, allora dovresti decidere sulla base della tua principale professione attuale e le tue esperienze lavorative.</p>
<p>Chi come me opera nel campo del <em>web design</em> e delle <em>web application</em>, ed ha cominciato le sue esperienze professionali in questo settore, allora sarà molto più facile che scelga la strada dell<em>&#8216;HTML5</em>, il <em>CSS3</em> ed il <em>Javascript</em>, linguaggi con cui ha già molta familiarità e tra cui sa muoversi molto bene.</p>
<p>Come ti ho mostrato in altri articoli, nello sviluppo di HTML Mobile App bisogna fare attenzione ad elementi come <strong><em>performance</em></strong> e <em>fluidità</em>, per non rischiare di rilasciare un prodotto di scarso valore e con una <em>user-experience</em> che non si avvicina nemmeno minimamente a quella delle applicazioni native.</p>
<p>Tuttavia è molto più facile affidarsi a linguaggi che già conosciamo piuttosto che studiarne di nuovi.</p>
<p><em>Per approfondire il discorso delle perfomance e fluidità, ti consiglio di leggere questi articoli:</em></p>
<ul>
<li><em><a title="Web e Mobile App fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile App fluide con layer e hardware acceleration</a></em></li>
<li><em><a title="Le 6 migliori tecniche per aumentare le performance di un' HTML Mobile App" href="http://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di un&#8217; HTML Mobile App</a></em></li>
</ul>
<p><em>Mentre per una serie di tutorial pratici su come creare un app in HTML5, puoi consultare la <a title="Come creare un app in HTML5, CSS3 e Javscript - Tutorials" href="http://www.upcreative.net/tutorial-css3-e-javascript-per-web-designers/">sezione tutorials</a> di questo blog.</em></p>
<p>Per un individuo che invece &#8220;parte da zero&#8221;, e vuole specializzarsi specificatamente nello sviluppo di mobile app, allora quella del <strong>linguaggio nativo</strong> potrebbe essere la strada che fa più al caso suo.</p>
<p>E&#8217; molto difficile pensare infatti che gli possa arrivare a padroneggiare molto bene sia linguaggi web che linguaggi nativi (i quali possono essere più di uno, se si decide di sviluppare per più di una piattaforma: <em>Objective-C</em>, <em>Java</em> ecc.) in modo parallelo.</p>
<p>Non sto dicendo che è impossibile, ma sicuramente è molto meno probabile.</p>
<h2>Il target dell&#8217;applicazione</h2>
<p><img class="aligncenter wp-image-4031 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/sistemi-operativi-mobile.jpg" alt="sistemi-operativi-mobile" width="690" height="300" /></p>
<p>La scelta del linguaggio è molte volte determinata anche dal <strong>target dei dispositivi</strong> per i quali decidiamo di rendere disponibile la nuova applicazione.</p>
<p>Se hai bisogno di pubblicare una determinata applicazione solamente per <em>iOS</em> o per <em>Android</em>, per esempio, allora potresti decidere si svilupparla interamente con linguaggio nativo.</p>
<p>Ovviamente ciò va considerato anche in base al futuro: c&#8217;è la possibilità che questa app possa più avanti essere resa disponibile anche per altri tipi di sistemi operativi?</p>
<p>Nel caso in cui abbiamo tale necessità o vogliamo che fin dall&#8217;inizio l&#8217;applicazione sia fruibile da più di un sistema operativo, allora la decisione più opportuna sarebbe quella di optare per l&#8217;HTML5.</p>
<h2>La tipologia dell&#8217;applicazione</h2>
<p>Un altro fattore influenzante da sottolineare è quello delle funzionalità e del tipo di interfaccia che l&#8217;applicazione deve avere.</p>
<p>Se hai la necessità di creare un videogioco molto complesso o un&#8217;interfaccia con una dinamica particolare, allora dovresti usare il linguaggio nativo, che ti consentirà di produrre un prodotto più leggero e molto meno dispendioso in termini di processore, oltre che più performante.</p>
<p>Se invece la tua necessità è quella di realizzare un&#8217;interfaccia &#8220;<em>standard</em>&#8221; con delle normali liste, delle schermate ad entrata che non prevedono effetti troppo complessi (con i CSS3 è possibile realizzare degli effetti &#8220;elaborati&#8221; che risultano comunque molto performanti, come <em>pop, </em><em>slide, flip, skew </em>ecc.), <em>headers</em>, <em>tab-bar</em> ecc., allora potremmo portare avanti il progetto tramite linguaggi <em>web-based</em>.</p>
<p><em>Se vuoi sapere come realizzare gli effetti delle interfacce native con HTML5 e CSS3 allora resta aggiornato sul mio e-book &#8220;<a title="HTML Mobile Accelerato&quot;" href="http://www.upcreative.net/html-mobile-accelerato/"><strong>HTML Mobile Accelerato</strong>&#8220;</a>, in cui ti mostrerò come realizzare un sistema di animazioni performante che non ha nulla da invidiare ad un&#8217;applicazione nativa:</em></p>
<p>&nbsp;</p>
<p><a href="http://www.upcreative.net/html-mobile-accelerato/"><img class="aligncenter wp-image-2689 size-medium" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1-300x222.png" alt="HTML-mobile-accelerato-ebook-cover" width="300" height="222" /></a></p>
<p>&nbsp;</p>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: I benefici dell&#8217;HTML5</h2>
<p><img class="aligncenter wp-image-3440 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg" alt="markup-html" width="690" height="200" /></p>
<p>Vediamo i principali benefici dei linguaggi nella realizzazione di mobile app con linguaggi <em>web-based.</em></p>
<ul>
<li><strong>Centralizzare il processo di sviluppo</strong>. Se nel caso dei linguaggi nativi siamo costretti a sviluppare la stessa applicazione da zero per ogni sistema operativo per il quale decidiamo di renderla disponibile, nel caso di mobile app in HTML5, CSS3  e Javascript possiamo utilizzare lo stesso progetto per tutte le piattaforme (apportando qualche piccolo aggiustamento, se vengono utilizzati dei plugin personalizzati per l&#8217;accesso a funzionalità del dispositivo, come vibrazione, bussola ecc.)</li>
<li><strong>Velocità e facilità di sviluppo. </strong>Come accennato in precedenza, per chi padroneggia molto bene il linguaggi web, è più facile e veloce realizzare l&#8217;interfaccia di una mobile app. In rete si possono inoltre trovare sempre più framework che adottano la filosofia del &#8220;<a title="Mobile first web design" href="http://www.yourinspirationweb.com/2013/09/18/mobile-first-la-nuova-tendenza/"><strong>mobile first</strong></a>&#8220;, e velocizzano ulteriormente le varie fasi di sviluppo</li>
<li><strong>La libertà negli aggiornamenti</strong>. Quando decidiamo di pubblicare un&#8217;applicazione su App Store, PlayStore e gli store delle altre piattaforme, siamo costretti ad attendere lunghi tempi di approvazione (2 settimane nel caso di App Store) prima che essa venga approvata. Lo stesso vale per ogni aggiornamento che invieremo. Con le HTML5 Mobile app, è possibile bypassare questo processo impostando un sistema che all&#8217;avvio dell&#8217;applicazione controlla il server per verificare la disponibilità di nuovi aggiornamenti, ed eventualmente effettuarne il download.</li>
</ul>
<h2>Come creare un app: i benefici del codice nativo</h2>
<p><img class="aligncenter wp-image-4033 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/06/mobile-app-linguaggio-nativo.jpg" alt="mobile-app-linguaggio-nativo" width="690" height="309" /></p>
<p>Vediamo quali sono invece i benefici dello sviluppo con codice nativo:</p>
<ul>
<li><strong>Maggior facilità di accesso alle funzionalità native</strong>. Se da un lato nel caso di mobile app <em>web-based </em>abbiamo dei tools (come Phonegap o Appcelerator) che ci offrono la possibilità di accedere e controllare alcune funzionalità native del dispositivo grazie a degli appositi plugin, è anche vero che il loro utilizzo è molte volte limitato, senza contare il fatto che per alcune delle funzionalità non esistono plugin. Con il linguaggio nativo, abbiamo piena libertà e maggior facilità di accesso a tutte le funzionalità del dispositivo.</li>
<li><strong>Possibilità di realizzare interfacce più complesse</strong>. Come già accennato in precedenza, sviluppando con linguaggio nativo è più facile creare una <em>user-experience</em> molto più avanzata ed interattiva, grazie anche alla possibilità di utilizzare i controlli e gli effetti messi a disposizione dello sviluppatore.</li>
<li><strong>La qualità dei controlli</strong>. Abbiamo detto che nel caso di HTML5 mobile app possiamo sfruttare molti framework CSS <em>mobile-first. </em>In alternativa possiamo anche scrivere personalmente le istruzioni CSS per ricreare gli stessi tipi di controlli nativi (come pulsanti, <em>header, tab-bar</em>, icone ecc.). Tuttavia la qualità di tali controlli non è ancora allo stesso livello dei UI-Kit da cui possiamo attingere con grazie ai linguaggi nativi.</li>
</ul>
<hr />
<p><em>Come creare un #mobileapp &#8211; #HTML5 o linguaggio nativo?</em><br /><a href='https://twitter.com/share?text=Come+creare+un+%23mobileapp+-+%23HTML5+o+linguaggio+nativo%3F&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Il linguaggio da adottare per creare un app dipende da numerosi fattori, ma credo che il principale sia la <strong>predisposizione e la familiarità che ogni sviluppatore ha con i vari tipi di linguaggi</strong>.</p>
<p>Personalmente sono molto più orientato verso i linguaggi web e l&#8217;HTML5, anche perchè mi sono specializzato fin dal principio nella realizzazione di siti web e soprattutto, di applicazioni web.</p>
<p>E tu? Di quale settore fai parte ? Anche tu sei un web designer e sei più predisposto ai linguaggi web, oppure sei più indirizzato verso linguaggi nativi?</p>
<p>O ancora, sei un web designer a cui piace spaziare a 360° e conosci sia i linguaggi nativi che quelli web?</p>
<p>Fammelo sapere nei commenti o inviami una mail, sono curioso di sapere quale metodologia stai adottando o ti piacerebbe adottare, e magari quali sono i tuoi obiettivi in merito.</p>
<p>&nbsp;</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il linguaggi <i>web-based</i>, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab261165eed8-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab261165eed8-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/">Come creare un app mobile: HTML5 o linguaggio nativo?</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-mobile-html5-o-linguaggio-nativo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</title>
		<link>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/#comments</comments>
		<pubDate>Fri, 16 May 2014 08:11:57 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Web SQL]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3957</guid>
		<description><![CDATA[<p>Come creare un app: ecco la seconda parte della mini-guida sul salvataggio dei dati in un'applicazione mobile sviluppata con HTML5, CSS3 e Javascript, utilizzando un database lato-client. In questo articolo analizzerò i metodi essenziali per poter sfruttare al meglio le funzionalità del Web SQL. </p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nella  <a title="Come creare un app in HTML: salvataggio dati con database SQL lato-client – parte 1" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">prima parte di questa mini-guida</a> ho introdotto i <strong>database <em>lato-client</em></strong> come soluzione per il salvataggio di quel tipo di dati che non necessitano di essere salvati su qualche sistema di <em>storage </em>remoto, utile sia per tipi di progetto come normali siti web, ma soprattutto per lo <strong>sviluppo di mobile app in HTML5, CSS3 e Javascript</strong>.</p>
<p>Molti sviluppatori (troppi) non sono a conoscenza del fatto che è possibile <strong>salvare dei dati in maniera relazionale sul browser</strong> dell&#8217;utente (o del visitatore), utilizzando uno dei linguaggi maggiormente conosciuti nel mondo del web design: l&#8217;<strong><em>SQL</em></strong>.</p>
<p>Da qui nasce l&#8217;idea di questa mini-guida.</p>
<p><img class="aligncenter wp-image-3976 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-i-database-parte-2.jpg" alt="come-creare-un-app-i-database-parte-2" width="690" height="430" /></p>
<p>Nello scorso articolo ti ho mostrato quali sono i database <em>lato-client</em> disponibili, ed in particolare ho anticipato <strong>i tre metodi fondamentali</strong> per poter <strong>sfruttare tutte le potenzialità del database Web SQL:</strong></p>
<ul>
<li><i>openDatabase</i></li>
<li><i>transaction</i></li>
<li><i>executeSql</i></li>
</ul>
<p>Vediamo come utilizzarli più nel dettaglio.</p>
<hr />
<p><em>Come creare una #mobileapp: i metodi del #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+i+metodi+del%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: Creare ed aprire un database</h2>
<p><img class="aligncenter wp-image-3977 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-nuovo-database.jpg" alt="Come-creare-un-app-nuovo-database" width="690" height="272" /></p>
<p>Per salvare i nostri dati abbiamo bisogno come prima cosa di <b>cerare un database</b>. Se si tenta di aprire un Database che non esiste l’API del <em>Web SQL</em> lo creerà automaticamente per noi.</p>
<p>Per creare ed aprire un database, proseguiamo come segue:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024 , function(database){
      alert(“Database creato e aperto correttamente”);
});</pre><p>
Nell’esempio abbiamo creato e aperto un nuovo Database associando la sua istanza ad una variabile “<i>db</i>”, il tutto passando <strong>5 parametri</strong> al metodo <i>openDatabase:</i></p>
<ol>
<li>Il nome del Database</li>
<li>Il numero della versione da utilizzare</li>
<li>Una descrizione di testo</li>
<li>Dimensioni stimate del Database</li>
<li>Callback di creazione</li>
</ol>
<p>Se usiamo come primo parametro il nome di un database che è già stato creato in precedenza, non viene creato un nuovo database, ma viene aperto quello già presente.</p>
<hr />
<p><em>Come creare una #mobileapp: creare e aprire un #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A%C2%A0creare+e+aprire+un%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: le transaction di Web SQL</h2>
<p><img class="aligncenter wp-image-3978 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-transaction.jpg" alt="Come-creare-un-app-Web-SQL-transaction" width="690" height="272" /></p>
<p>Una volta aperto il Database, possiamo istanziare <strong>l&#8217;oggetto <i>transaction</i></strong>, che ci servirà per eseguire le query di cui abbiamo bisogno.</p>
<p>Ma perché servirsi di un oggetto aggiuntivo come la <i>transaction </i>invece di scrivere semplicemente le nostre righe di SQL?</p>
<p>Le <i>transaction </i>ci permettono di usufruire di una funzionalità di <b><i>rollback:</i></b> ciò significa che, se una <i>transaction</i> contenente una o più query SQL per qualche ragione fallisce, gli aggiornamenti al database non vengono effettuati, come se la transazione non fosse mai avvenuta.</p>
<p>E’ una logica di funzionamento molto simile a quella delle transazioni dei database MSSql, e rappresenta un grande vantaggio, soprattutto quando abbiamo la necessità di eseguire <b>più operazioni di modifica in</b> coda.</p>
<p>Il metodo <i>transaction </i>dà  allo sviluppatore anche la possibilità di <strong>gestire eventuali errori</strong> nella transazione con delle apposite <strong><i>callback di errore e di successo</i>.</strong></p>
<p>Ma vediamo più nel dettaglio come si utilizza.</p>
<p>La <i>transaction</i> non è altro che una semplice funzione con una <i>callback </i>di ritorno:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);
db.transaction(function(tx){
     /* Effettuare le proprie query qui */
}, function(){
     //callback di successo
     alert(“Istruzioni SQL eseguite correttamente”);
});</pre><p>
L’oggetto &#8220;<i>tx&#8221;</i> restituito nella prima funzione di callback, rappresenta l’oggetto della <i>transaction</i>, che useremo per eseguire le query di cui abbiamo bisogno.</p>
<p>Oltre al metodo <i>transaction, </i>è possibile usare anche il metodo <i><strong>readTransaction</strong>, </i>che funziona in modo del tutto analogo al primo<i>, </i>ma che non può essere impiegato per eseguire delle istruzioni SQL di modifica del database (come per es. la <i>creazione o l&#8217;eliminazione di tabelle</i>, oppure istruzioni come <i>INSERT </i>ed <i>EDIT</i>), in quanto è stato creato appositamente per <i>velocizzare le query di lettura.</i></p>
<p>Tuttavia con i metodo <i>transaction</i> possiamo effettuare sia query di lettura che di modifica.</p>
<p>Una volta ottenuto il nostro oggetto <i>transaction, </i>procediamo con <strong>l’esecuzione delle query</strong>.</p>
<h2>Come creare un app in HTML: il metodo executeSQL</h2>
<p><img class="aligncenter wp-image-3979 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-executeSQL.jpg" alt="Come-creare-un-app-Web-SQL-executeSQL" width="690" height="272" /></p>
<p>Eccoci finalmente al punto in cui possiamo divertirci con le istruzioni SQL.</p>
<p><em>executeSQL</em> può essere utilizzato <strong>sia per query di lettura che per query di modifica del database</strong>, include un <strong>controllo implicito per l&#8217;<i>SQL Injection</i></strong>, e fornisce una callback di ritorno per poter processare i risultati delle query effettuate.</p>
<h3>Come creare una tabella</h3>
<p>Il metodo <i>executeSql</i> è un metodo dell’oggetto <i>transaction </i>(ovvero dell&#8217;oggetto fornito con il parametro di ritorno “<em>tx</em>”) e viene utilizzato in questa maniera:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);

db.transaction(function(tx){
	/* Effettuare le proprie query qui */
}, function(){
	//callback di successo
	tx.executeSql("CREATE TABLE Employees (id unique, name)", [] , 			
		function(sqlTransaction, sqlResultSet){
				alert("La tabella è stata creata.");
		}, 
		function(sqlTransaction, sqlError){			
			/* Gestione degli errori */
		}
	);
});</pre><p>
L’esempio che ti ho appena mostrato <strong>crea una tabella</strong> dal nome “<i>Employees</i>” all’interno del nostro Database “<i>nomeDatabase</i>”.</p>
<p>Ovviamente, se la tabella già esiste sarà restituito un errore, che possiamo gestire all’interno della funzione passata come terzo parametro, oppure possiamo evitare l’errore a priori con una query del tipo:</p><pre class="crayon-plain-tag">var db = openDatabase(“nomeDatabase”, “1.0”, “IL mio primo database!”, 3 * 1024 * 1024);
db.transaction(function(tx){
	/* Effettuare le proprie query qui */
}, function(){
	//callback di successo
	tx.executeSql("CREATE TABLE IF NOT EXISTS Employees (id unique, name)");
	tx.executeSql("INSERT INTO Employees (id, name) VALUES (1, ‘Giacomo')");
});</pre><p>
Ora la tabella “<i>Employees” </i>ha un record al suo interno.</p>
<hr />
<p><em>Come creare una #mobileapp: effettuare query in un #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+effettuare+query%C2%A0in+un%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h3>Come inserire un nuovo record in una tabella</h3>
<p>Ma se volessimo inserire una riga mediante dei valori dinamici?</p>
<p>Ciò è possibile utilizzando il secondo argomento da passare al metodo <i>executeSQL:</i></p><pre class="crayon-plain-tag">tx.executeSql(“INSERT INTO Employees (id, name) VALUES (?, ?) ”, [variabile_id, variabile_name] );</pre><p>
In questo modo le variabili “<i>variabile_id</i>” e “<em>variabile_name</em>” saranno sostituite ai caratteri “<i>?</i>” all’interno della query <strong>in modo sequenziale</strong>.</p>
<h3>Come leggere i record di una tabella e processarli con il javascript</h3>
<p>Infine, per eseguire <strong>query di lettura</strong> nella nostra tabella, basterà utilizzare la <i>callback </i>di ritorno processando i risultati ottenuti:</p><pre class="crayon-plain-tag">tx.executeSql('SELECT id, name FROM Employees', [  ], function (tx, resultsData) {
	//i record restituiti sono all’interno della proprietà “rows” dell’oggetto resultsData
	//loop per scorrere tutti i risultati ottenuti
	for (var i = 0; resultsData.rows.length &lt; len; i++) {
		var employee = resultsData.rows.item(i);
		console.log(employee .name);
	}
});</pre><p>
La <em>callback</em> riceve <strong>due parametri di ritorno</strong>:</p>
<ul>
<li><strong>l’oggetto della transazione</strong> (lo stesso che abbiamo usato per effettuare la query)</li>
<li><strong>l’oggetto <em>javascript</em> dei risultati</strong> contenente un attributo “<i>rows</i>” strutturato come un array, anche se non lo si può definire un’array a tutti gli effetti: per accedere ai dati di un singolo <em>record</em> dobbiamo utilizzare la sintassi &#8220;<i>rows.item(i)</i>&#8220;, dove “<i>i</i>” rappresenta l’indice del <em>record</em>  all&#8217;interno della lista dei risultati, mentre in un normale <i>array </i>sarebbe bastato scrivere “<i>rows[i]</i>”).</li>
</ul>
<p>Dall’istruzione “<i>var employee = resultsData.rows.item(i);</i>” otteniamo quindi l’oggetto di un singolo <em>record</em>, che avrà le stesse proprietà dei campi richiesti nella <em>query</em> (nel nostro caso avrà quindi due proprietà: “<i>id</i>” e “<i>name</i>” );</p>
<h2>Come creare un app: conclusioni sui metodi del Web SQL</h2>
<p>Queste sono a grandi linee tutte le nozioni di cui abbiamo bisogno per sfruttare la maggior parte delle funzionalità del <em>Web SQL</em>.</p>
<p>Come ho spiegato nella <a title="Come creare un app in HTML: salvataggio dati con database SQL lato-client – parte 1" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">prima parte di questa mini-guida</a>, il <em><strong>Web SQL</strong></em> è un metodo molto utile per salvare dati in <strong>forma relazionale</strong> all&#8217;interno di qualsiasi<em> single page application, </em>sia quelle destinate ad essere compilate con strumenti come <a title="Phonegap - Sviluppo come creare un app in HTML5, CSS3 e Javascript" href="http://phonegap.com/"><strong><em>Phonegap</em></strong></a> e distribuite su dispositivi mobile, sia quelle che saranno disponibili come <em>web app</em> ed accessibili direttamente da un indirizzo remoto.</p>
<p>Personalmente trovo questo metodo di salvataggio molto utile per salvare le impostazioni personali dell&#8217;utente, come nel caso di <a title="Tint - HTML5 Mobile App su App Store" href="http://www.upcreative.net/tint-weather-app/">Tint</a> (la mia app per il meteo), o per salvare i dati sul dispositivo per quelle applicazioni che non devono essere sincronizzate in cloud, come ho fatto per <a title="Dieta SI o NO? - HTML5 Mobile App distribuita su App Store" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>.</p>
<p>Tuttavia va ricordato il fatto che le <strong><em>specifications del W3C</em> hanno abbandonato il supporto al Web SQL</strong> a favore del database non-relazionale <strong>IndexedDB</strong> e,<strong> </strong>in un futuro molto prossimo, il Web SQL non sarà più supportato dai browser, inclusi quelli mobile.</p>
<hr />
<p><em>Come creare una #mobileapp: i metodi del #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+i+metodi+del%C2%A0%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Ed Ora?</h2>
<p>Se hai mai utilizzato sistemi di memorizzazione come i database <em>lato-client</em> mi piacerebbe avere un tuo riscontro per quanto riguarda le tue reali esperienze, i tuoi progetti e/o reali <em>case-study</em>.</p>
<p>Sentiti libero/a inoltre di esporre tutti i tuoi dubbi o perplessità al riguardo, sia inviandomi una mail all&#8217;indirizzo <a href="mailto:info@upcreative.net">info@upcreative.net</a>, o meglio ancora, commentando questo articolo.
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il sistema di salvataggio Web SQL insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab2611672597-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab2611672597-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 2</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-html-salvataggio-dati-database-sql-lato-client-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</title>
		<link>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/#comments</comments>
		<pubDate>Sat, 10 May 2014 11:53:05 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[come creare app]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Web SQL]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3953</guid>
		<description><![CDATA[<p>Per qualsiasi Applicazione Mobile si ha il bisogno di salvare dati, e la maggior parte delle volte tali dati necessitano di essere memorizzati nel dispositivo dell'utente. Tutti i web designers hanno, per forza di cose, molta familiarità con l'SQL: in questo articolo vedremo come creare un app in HTML utilizzando come metodo di salvataggio un database relazionale lato-client: il Web SQL.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Molti sviluppatori <em>javascript</em> forse non ne sono a conoscenza, ma <strong>esiste un metodo per poter salvare i dati in un Database lato-client</strong>. Ciò significa che è possibile utilizzare database <strong>situati nel dispositivo dell&#8217;utente</strong>.</p>
<p>Esso costituisce un grande vantaggio nella realizzazione di <em>HTML Mobile App</em> e <em>single page application</em> in generale, anche se i database SQL <em>lato-client</em> possono essere utilizzati per qualunque sito web, in quanto si tratta di una <strong>funzionalità HTML5</strong>.</p>
<p>In un articolo che ho scritto per <a href="http://www.yourinspirationweb.com/">YourInspirationWeb.com</a>, avevo riportato le varie modalità con cui è possibile salvare i dati per una HTML Mobile App sviluppata in CSS3 e Javascript: <strong><a title="HTML Mobile App: Tecniche per il salvataggio dei dati" href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/">HTML Mobile App: Tecniche per il salvataggio dei dati</a>.</strong></p>
<p>In questo post prenderemo in considerazione il terzo metodo per il salvataggio dati esposto nell&#8217;articolo di YourInspirationWeb.com: il <strong>Database HTML5</strong>.</p>
<p><img class="aligncenter wp-image-3964 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-i-database.jpg" alt="come-creare-un-app-i-database" width="690" height="430" /></p>
<p>La maggior parte degli sviluppatori web è abituata a salvare i propri dati tramite <strong>metodi relazionali</strong>, utilizzando perlopiù database come <em>mySql </em>o <em>MsSql, </em>e chi si occupa dello sviluppo di Mobile App in HTML5, CSS3 e Javascript solitamente è prima di tutto un web designer impegnato nella realizzazione di siti web (tramite appunto questo tipo di database, come nel caso di sviluppatori WordPress).</p>
<p>Pertanto molti saranno contenti del fatto che <strong>per la creare mobile app è disponibile un metodo di salvataggio che sfrutta database <em>lato-client</em></strong>.</p>
<p>Se infatti <i>lato-server</i> è possibile usare qualsiasi sorta di database, anche l’HTML mette a disposizione un tipo di <b>database <i>lato-client</i></b>, che lo sviluppatore può sfruttare per poter inserire, modificare, cancellare e leggere i dati del proprio progetto sul dispositivo, secondo una metodologia <b>relazionale<i>, </i></b>tramite vere e proprie <i>query SQL</i>.</p>
<p>Ma cosa intendo per &#8220;<em>database lato-client</em>&#8220;?</p>
<blockquote><p>Per<em> database lato-client</em> intendo un tipo di database che risiede nel browser utilizzato dall&#8217;utente, grazie al quale possiamo evitare <strong>di dover comunicare con il server</strong>, come per esempio per mezzo di chiamate ajax.</p></blockquote>
<hr />
<p><em>Come creare una #mobileapp: salvataggio dati con #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+salvataggio+dati+con+%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Come creare un app: due tipi di database lato-client</h2>
<p><img class="aligncenter wp-image-3965 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/Come-creare-un-app-Web-SQL-ed-IndexedDB.jpg" alt="Come-creare-un-app-Web-SQL-ed-IndexedDB" width="690" height="272" /></p>
<p>Lo sviluppatore ha a disposizione <b>due tipi diversi di database lato client in HTML5</b>:</p>
<ul>
<li><b>Web Sql (di tipo relazionale)</b>: mette a disposizione un modello di API che permettono di eseguire delle query tramite una variante di linguaggio SQL.</li>
<li><b>IndexedDB (di tipo coppia chiave-valore)</b>: definisce un modello API con le quali è possibile lavorare in un database di record con valori semplici ed oggetti gerarchici.</li>
</ul>
<p>Come per il <i>localStorage</i>, anche nel caso dei Database <i>Web Sql </i>ed <i>IndexedDB  </i>generalmente abbiamo a disposizione una capacità di memoria predefinita di 5MB, che può variare a seconda della versione del browser del dispositivo e delle impostazioni scelte dall’utente.</p>
<h3>Come creare un app: la compatibilità dei database lato-client</h3>
<p>Purtroppo nel momento in cui scrivo ci troviamo ancora in una terra al quanto instabile, per quanto riguarda i database <i>lato-client: </i></p>
<p>se da un lato il <b>WebSql </b>non sarà più mantenuto in modo attivo dalle <b><i>specifications </i>dello staff W3C </b>(ecco il link<a href="http://dev.w3.org/html5/webdatabase/"> alla pagina ufficiale w3c</a>), il che significa che in un futuro molto prossimo sarà abbandonato, dall’altro l’<b>IndexedDB </b>non è ancora supportato da Mobile Safari per iOS, che invece supporta ancora il <em>Web SQL</em> (per la tabella delle compatibilità di IndexedDB visita <a href="http://caniuse.com/indexeddb">questo link</a>). Puoi consultare la pagina ufficiale w3c dell’IndexedDB <a href="http://www.w3.org/TR/IndexedDB/">collegati a questo indirizzo</a>.</p>
<p>Siccome stiamo parlando di <b>Mobile </b>App, e siccome il numero di dispositivi Apple rappresenta <strong>una grandissima fetta dell’utenza mondiale</strong> (quindi una grandissima portata al livello di audience e possibilità di mercato), è opportuno secondo me lavorare ancora con il database <i>WebSql,</i> per dirigersi poi verso l’IndexedDB mano a mano che esso sarà supportato da tutti i dispositivi.</p>
<p><img class="aligncenter wp-image-3966 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/come-creare-un-app-w3c-specification.jpg" alt="come-creare-un-app-w3c-specification" width="690" height="272" /></p>
<p>Tra l’altro, anche le versioni desktop di Chrome, Safari ed Opera supportano il WebSql, il che ci dà la possibilità di testare eventualmente il salvataggio dati anche su browser desktop, evitando di effettuare ogni volta il <em>deploy</em> nel dispositivo mobile.</p>
<p>L&#8217;<em>indexedDB</em> inoltre non è un modello di database relazionale.</p>
<p>Per ora prenderemo quindi in considerazione solamente il database <i>WebSql</i>.</p>
<hr />
<p><em>Come creare una #mobileapp: salvataggio dati con #database #SQL lato-client</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23mobileapp%3A+salvataggio+dati+con+%23database+%23SQL+lato-client&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/' target='_blank'>Click To Tweet</a></p>
<hr />
<h3>Come creare un app: Il database Web SQL</h3>
<p>Abbiamo detto che <b>il Database Web SQL permette di utilizzare l’SQL lato-client</b>.</p>
<p>Quindi, se hai un background da programmatore <em>back-end</em> (come la maggior parte dei web designers) oppure sei un programmatore <em>front-end</em> con nozioni di <em>back-end,</em> non avrai problemi con l’SQL, altrimenti apprendere l’SQL sarà uno stimolo per poter imparare una nuova competenza.</p>
<p>La sintassi del Web Sql è basata sull’SQLite, ma è molto similare anche ad altri database relazionali com MySql, MSSql e via dicendo.</p>
<p><b>Come si usa</b></p>
<p>Vediamo le nozioni principali del Web SQL (ovviamente se vuoi approfondire l’argomento, dal nostro caro &#8220;amico Google&#8221; potrai trovare tutte le informazioni che ti interessano).</p>
<p>Per sfruttare le funzionalità del Web SQL e poter salvare i dati della nostra applicazione in un database lato-client, sono 3 i <i>metodi </i>da prendere principalmente in considerazione:</p>
<ul>
<li><i>openDatabase</i></li>
<li><i>transaction</i></li>
<li><i>executeSql</i></li>
</ul>
<h3>Come creare un app: il database SQL lato client parte 1 &#8211; conclusioni</h3>
<p><strong>Nella seconda parte di questa guida</strong> analizzeremo come poter utilizzare le funzionalità principali del Web SQL tramite i 3 metodi appena elencati, che ci forniscono tutto ciò di cui abbiamo bisogno per poter <strong>creare nuovi database e stabilire una connessione con quelli già esistenti</strong>, oppure effettuare altre operazioni fondamentali come la <strong>creazione di tabelle</strong>, <strong>l&#8217;inserimento, la modifica o la cancellazione di records</strong>.</p>
<p>E tu? Hai mai utilizzato i database lato-client per i tuoi progetti?</p>
<p>Magari l&#8217;hai utilizzata per salvare qualche tipo di dato, oppure pensi che potrebbe essere una possibile soluzione per il tuo prossimo progetto. Scrivi pure tutte le tue considerazioni e/o perplessità al riguardo nei commenti, e sarò lieto di aiutarti a capire se il Web SQL potrebbe essere implementato nei tuoi lavori.</p>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando il sistema di salvataggio Web SQL insieme a molte altre tecniche, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab261168ad22-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab261168ad22-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">Come creare un app in HTML: salvataggio dati con database SQL lato-client &#8211; parte 1</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Come creare Mobile App in HTML: il sistema di javascript templating</title>
		<link>https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/</link>
		<comments>https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/#comments</comments>
		<pubDate>Wed, 30 Apr 2014 09:02:16 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[html template]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[single page application]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3889</guid>
		<description><![CDATA[<p>Creare Mobile App in HTM, CSS3 e Javascript senza seguire una logica che possa permettere di mantenere organizzata la struttura del progetto è una pratica purtroppo molto diffusa. In questo articolo ti mostro come aumentare mantenibilità e scalabilità del codice generando markup HTML di un'applicazione tramite i sistemi di javascript templating.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/">Come creare Mobile App in HTML: il sistema di javascript templating</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Per creare una <em>Mobile App in HTML</em> o una qualsiasi <em>web app javascript</em> è fondamentale organizzare il progetto secondo una <strong>struttura ben adeguata, </strong>evitando di produrre codice secondo la &#8220;non-logica&#8221; <em>Spaghetti Code </em>(leggi <a title="HTML5 Mobile App: come definire la struttura dati" href="http://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/">questo articolo</a> per saperne di più)<strong>.</strong></p>
<p>Come già affrontato in altri numerosi post, adottare una <a title="HTML5 Mobile App: l’importanza del framework MVC" href="http://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/"><strong>logica di sviluppo basata sull&#8217;MVC</strong></a> può aiutare notevolmente lo sviluppatore a raggiungere tale obiettivo.</p>
<p>Un altro metodo molto utile per mantenere il codice <strong>scalabile</strong> e <strong>mantenibile</strong>, oltre che <a title="Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App" href="http://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/"><strong>aumentare le performance</strong></a> dell&#8217;applicazione, consiste nell&#8217;utilizzo di <b>sistemi di Javascript templating</b> in stretta relazione con le <i>view</i>, che si occupano della rappresentazione visiva dei vari componenti dell’interfaccia.</p>
<p>I <em>sistemi di templating Javascript</em> consentono infatti di generare il markup dinamico di una determinata <em>view</em> (leggi <a title="HTML Mobile App: il funzionamento delle view" href="http://www.yourinspirationweb.com/2014/04/29/html-mobile-app-il-funzionamento-delle-view/">questo articolo che ho scritto per YourInspirationWeb  per sapere come utilizzare una view con backbone.js</a>) in base ai dati che gli vengono passati al momento della compilazione.</p>
<p>Prima di entrare più nel dettaglio, vediamo quali sono solitamente le alternative adottate per la generazione di markup in una Mobile App sviluppata in HTML5, CSS3 e Javascript.</p>
<hr />
<p><em>Come creare #MobileApp in #HTML5: il sistema di #javascript templating</em><br /><a href='https://twitter.com/share?text=Come+creare+%23MobileApp+in+%23HTML5%3A+il+sistema+di+%23javascript+templating&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Creare Mobile App in HTML: come viene generato solitamente il markup</h2>
<p>Siccome in una HTML5 Mobile App tutta la generazione del <em>markup</em> e degli elementi DOM dell’interfaccia avviene tramite linguaggio <em>lato-client</em>, e quindi tramite javascript, generalmente si tende a seguire 3 strade principali per inserire il codice HTML di ogni schermata (o <em>view</em>) all’interno del progetto:</p>
<h4>1 &#8211; Effettuare chiamate ajax che restituiscono dati HTML da un server remoto.</h4>
<p><img class="aligncenter wp-image-3896 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/mobile-app-html-template-via-ajax.jpg" alt="mobile-app-html-template-via-ajax" width="690" height="400" /></p>
<p>Rappresenta secondo me il tipo di approccio più sbagliato.</p>
<p>Stiamo parlando di applicazioni mobile e ciò comporterebbe il <strong>trasferimento di una grande quantità di dati</strong> e <strong>tempi di attesa più lunghi</strong>, soprattutto se l’utente sta usando l’applicazione in una zona fisica in cui il traffico è limitato o quasi assente.</p>
<p>Senza contare il fatto che il codice restituito (stringa formata dall&#8217;HTML generato dal server) risulta difficile da interpretare per l’applicazione JavaScript, e solitamente necessita di un&#8217;<strong>adeguata formattazione</strong> prima dell&#8217;immissione all&#8217;interno del documento.</p>
<p>La comunicazione in remoto dovrebbe essere pertanto utilizzata <strong>solo al fine di reperire o inviare dati &#8220;puri&#8221;</strong> (come per esempio un oggetto JSON).</p>
<h4>2 &#8211; Inserire l’HTML di tutte le schermate<i> </i>nel documento</h4>
<p><img class="aligncenter wp-image-3897 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/mobile-app-html-statico.jpg" alt="mobile-app-html-statico" width="690" height="400" /></p>
<p>Per creare una Mobile App in HTML si utilizza un file principale <em>index.html. </em></p>
<p>Secondo questo metodo all&#8217;interno di quel file viene inserito tutto il markup necessario per far funzionare l&#8217;applicazione, relativo a alle varie <em>view</em> che la compongono.</p>
<p>Può andar bene per progetti formati al massimo da 4/5 schermate, dopo di ché diventa facile smarrirsi nei meandri del codice HTML come un bambino di 3 anni in un bosco.</p>
<p>Se poi consideriamo il fatto che in quelle <i>view</i> possiamo avere la necessità di inserire dati dinamici, per aggiungerli al DOM dovremmo comunque servirci di codice Javascript, utilizzando così non uno, ma due tipi di approcci diversi per lo stesso scopo (1 &#8211; html statico, 2 &#8211; generazione di <em>markup</em> via javascript).</p>
<p>Inoltre, inserire tutti i nodi DOM all’interno del documento <strong>riduce notevolmente le <a title="Performance CSS3: consigli per ottimizzare le animazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">prestazioni di <em>rendering</em></a></strong>, a causa del numero di elementi HTML per i quali la CPU è costretta a ricalcolare gli stili nel momento in cui si verifica qualsiasi modifica CSS, oppure ogni volta che un elemento si sposta nello schermo (quando ciò questo accade vengono coinvolti nello spostamento anche altri nodi del documento).</p>
<h4>3. Generare codice tramite javascript con una concatenazione di stringhe</h4>
<p><img class="aligncenter wp-image-3898 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/html-mobile-app-markup-concatenazione-stringhe.jpg" alt="html-mobile-app-markup-concatenazione-stringhe" width="690" height="204" /></p>
<p>E&#8217; provato che creare grandi blocchi di codice HTML tramite una concatenazione di stringhe riduce drasticamente la velocità per le prestazioni di esecuzione, in quanto la variabile <em>in-memory</em> utilizzata per svolgere tale operazione va ad <strong>occupare parte della CPU</strong>.</p>
<p>Coloro che adottano questa tecnica inoltre, si perdono spesso in cicli nidificati in cui non si capisce quale <em>tag</em> chiude l’altro, e dove non si riesce a distinguere dati puri dall’HTML.</p>
<p>Ecco un possibile esempio di questa tecnica:</p><pre class="crayon-plain-tag">var markup = "&lt;div class=\"main-wrapper\"&gt;"+
				"&lt;header class=\"page-header\" role=\"header\"&gt;&lt;h1 class=\"\"&gt;&lt;/h1&gt;&lt;/header&gt;"+
				"&lt;section class=\"page-section\"&gt;&lt;/section&gt;"+
				"&lt;ul class=\"contacts-list\"&gt;";

			for(var i=0;i&lt;contacts.length;i++){
				markup+="&lt;li class=\"contact-list-item\"&gt;"+contacts[i].name+" "+contacts[i].surname+"&lt;/li&gt;";
			}

			markup+="&lt;/ul&gt;&lt;/div&gt;";

$(".content").append(markup);</pre><p>
&nbsp;</p>
<p>E’ preferibile invece <strong>lasciare libera la memoria del dispositivo per le operazioni di rendering</strong>, che influiscono sulla <em>user-experience</em> del prodotto finale, così come è preferibile <strong>lasciare separati codice HTML da codice Javascript</strong>, in modo da aumentare la <b>mantenibilità</b> e la <b>scalabilità </b>del progetto e poter facilmente <strong>riutilizzare</strong> uno stesso <em>template</em> in diverse parti<strong>.</strong></p>
<h2>Creare Mobile App in HTML: il funzionamento dei sistemi di templating</h2>
<p><img class="aligncenter wp-image-3894 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/Crere-mobile-app-in-HTML-i-sistemi-di-Javascript-templating.jpg" alt="Crere-mobile-app-in-HTML---i--sistemi-di-Javascript-templating" width="690" height="400" /></p>
<p>Gli sviluppatori javascript hanno a disposizione diversi framework di templating per generare via <em>client</em> il markup HTML delle <em>view </em>che compongono le loro applicazioni (come per esempio <a href="http://handlebarsjs.com/"><i>Handlebars.js</i></a>, <i><a href="http://mustache.github.io/">Mustache</a>,</i> o il sistema interno al framework <a href="http://underscorejs.org/"><i>underscore.js</i></a>).</p>
<blockquote><p>Per conoscere anche altri sistemi di javascript templating, ti consiglio di leggere questo mio precedente articolo:</p>
<ul>
<li><a title="I sistemi di javascript templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">I sistemi di javascript templating e le migliori librerie</a></li>
</ul>
</blockquote>
<p>I <em>template</em> possono essere savat in variabili <strong>in-memory</strong><em>, in</em> <strong>file HTML indipendenti</strong> o <strong>all&#8217;interno del documento</strong>, solitamente racchiusi in tag <i>&lt;script&gt;</i> con un attributo &#8220;<i>type&#8221; </i>personalizzato (per esempio “<strong><em>text/template</em></strong>”:  “<em>&lt;script type=“text/template”&gt; &lt;!&#8211; markup del template —&gt; &lt;/script&gt;</em>”).</p>
<hr />
<p><em>[Tweet &#8220;Come creare #MobileApp in #HTML5: il sistema di #javascript templating</em><br /><a href='https://twitter.com/share?text=%5BTweet+%22Come+creare+%23MobileApp+in+%23HTML5%3A+il+sistema+di+%23javascript+templating&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/' target='_blank'>Click To Tweet</a></p>
<hr />&#8220;]
<p>Ogni template ha accesso a delle variabili, a seconda dei dati che gli vengono passati.</p>
<p>Utilizzare le variabili è molto semplice e generalmente è possibile farlo all’interno di <strong>appositi delimitatori</strong>, il cui funzionamento non è molto diverso da quello della generazione del markup HTML dinamico tramite i più diffusi linguaggi <em>lato-server</em> (ASP, PHP, C# ecc.).</p>
<p>Il lavoro è reso ancora più facile per il fatto che la maggior parte di questi sistemi accetta dati in formato JSON (formato in cui può essere convertito facilmente qualsiasi tipo di dati).</p>
<p>I delimitatori delle variabili possono differire a seconda del framework utilizzato, ma il funzionamento logico rimane pressoché sempre lo stesso.</p>
<p>Due sono le categorie principali in cui si suddividono i vari tipi di sistemi di templating:</p>
<ul>
<li><b>embedded javascript, </b>comprende i frameworks che permettono l’utilizzo di codice javascript all’interno dei propri template</li>
<li><b>logic less, </b>comprende quelli che non permettono l’utilizzo di javascript al loro interno, ma limitano l’uso di logiche come cicli e condizioni a sintassi personalizzate</li>
</ul>
<p>Vediamo il funzionamento del sistema di templating di <strong><i>underscore.js</i>,</strong> che appartiene alla prima categoria, e che può essere utilizzato per <a title="Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js" href="http://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/">creare mobile app in html con il framework MVC <i>Backbone.js</i></a><b>.</b></p>
<p>Più concretamente, vediamo l’esempio di un ciclo che genera in maniera dinamica l’HTML necessario per mostrare una lista di individui.</p>
<p>Consideriamo di dover generare il markup della lista servendoci dei seguenti dati in formato JSON:</p><pre class="crayon-plain-tag">{
	'employees': [
		{‘name': ‘Giacomo Freddi’, occupation: ‘Web Designer / Front-End Developer’},
		{‘name': ‘Mario Rossi’, occupation: ‘CEO’},
		{‘name': ‘Franco Mancini’, occupation: ‘Web Marketer’},
		...
	]
}</pre><p>
Ecco come potrebbe presentarsi il template secondo il sistema di templating di <i>underscore.js</i></p><pre class="crayon-plain-tag">&lt;ul&gt;
   &lt;%for(var i=0;i&lt;employees.length;i++){%&gt;
   &lt;li&gt;&lt;%=employees[i].name%&gt; - &lt;%=employees[i].occupation%&gt;&lt;/li&gt; 
   &lt;%}%&gt;
&lt;/ul&gt;</pre><p>
In tal caso il risultato del markup generato sarebbe:</p><pre class="crayon-plain-tag">&lt;ul&gt;
   &lt;li&gt;Giacomo Freddi - Web Designer / Front-End Developer&lt;/li&gt;
   &lt;li&gt;Mario Rossi - CEO&lt;/li&gt;
   &lt;li&gt;Franco Mancini - Web Marketer&lt;/li&gt;
   …
&lt;/ul&gt;</pre><p>
Con i javascript templating lo sviluppatore ha sicuramente una cosa in meno a cui pensare, in quanto la maggior parte del lavoro di generazione del markup viene svolto dal sistema stesso.</p>
<h2>Creare mobile app in HTML: i benefici del sistema di templating</h2>
<p>Ciò porta ad un gran numero di benefici nel creare mobile app in HTML o qulasiasi <em>single page application</em>, in particolare se si decide di salvare i <em>template</em> di ogni <i>view</i> all&#8217;esterno del documento principale dell’applicazione (<i>index.html</i>), inserendo ognuno di essi in un apposito file (es.: <i>nome-della-view.html).</i></p>
<p>Il contenuto del file viene poi caricato dinamicamente, solamente se e quando abbiamo bisogno di effettuare il <em>render</em> di quella <i>view </i>all’interno dell’interfaccia.</p>
<p>Quello appena esposto è il metodo che preferisco, in quanto permette di separare completamente all&#8217;interno del progetto il concetto di <em>templating</em> da tutto il resto (sinonimo di <em>mantenibilità</em> e <em>scalabilità</em>) e, nel senso più &#8220;fisico&#8221; del termine, ogni <i>view</i> dall&#8217;altra.</p>
<p>Così facendo è possibile mantenere la struttura dei file dell’applicazione ancora <strong>più organizzata</strong>.</p>
<p><img class="aligncenter wp-image-3895 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/html-mobile-app-javascript-templating.jpg" alt="html-mobile-app-javascript-templating" width="690" height="400" /></p>
<p>Bisogna comunque  fare attenzione al fatto che <b>i template non rappresentano di per sé delle <i>view</i></b><i>,</i> bensì lo strumento grazie al quale esse possono effettuare il <em>render</em> del markup HTML che le rappresenterà all’interno del documento. Molti sviluppatori spesso confondono il concetto di <i>view</i> con quello di <i>template,</i> ma <b>non sono assolutamente la stessa cosa</b>.</p>
<p>Una <i>view</i> è un oggetto che che <i>osserva</i> un modello dati (in MVC i cosiddetti <i>model</i>) e <strong>mantiene la propria rappresentazione visiva aggiornata</strong> in base ad esso. Una <em>view</em> è definita da codice <i>Javascript</i>.</p>
<p>Il <i>template</i> potrebbe essere lo strumento di cui si serve la <i>view</i> per generare parte del proprio <em>markup</em> necessario alla visualizzazione, o di tutto il <em>markup</em> necessario.</p>
<hr />
<p><em>Come creare #mobileapp in #HTML5 &#8211; i benefici del #javascript #templating</em><br /><a href='https://twitter.com/share?text=Come+creare+%23mobileapp+in+%23HTML5+-+i+benefici+del+%23javascript+%23templating&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Oltre che per creare mobile app in HTML o qualsiasi altro tipo di <em>web app </em>sviluppata<em> </em>in HTML, CSS3 e Javascript, i sistemi di templating sono molto utilizzati anche per la realizzazione di siti web che forniscono una <em>user-experience</em> di qualità molto elevata.</p>
<p>Solitamente gli sviluppatori <em>front-end</em> più affermati si servono di sistemi di javascript templating per generare markup da template salvati in file .<em>html</em> esterni, o dichiarati all&#8217;interno della pagina in appositi <em>script</em> personalizzati.</p>
<p>E tu hai mai utilizzato i sistemi di javascript templating? Ne hai privato qualcuno da suggerire? Scrivilo nei commenti e sarò felice di risponderti!
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab261169d416-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab261169d416-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/">Come creare Mobile App in HTML: il sistema di javascript templating</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-mobile-app-in-html-sistema-di-javascript-templating/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>HTML5 Mobile App: come definire la struttura dati</title>
		<link>https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/</link>
		<comments>https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/#comments</comments>
		<pubDate>Thu, 24 Apr 2014 08:32:23 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Backbone.js]]></category>
		<category><![CDATA[HTML5 Mobile App]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[MVC Javascript frameworks]]></category>
		<category><![CDATA[single page application]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3864</guid>
		<description><![CDATA[<p>Se si vuole realizzare un' HTML5 Mobile App uno degli aspetti più importanti è quello della struttura logica: servirsi di model e collection per definire i dati che saranno gestiti all'interno del progetto è fondamentale per quanto riguarda l'organizzazione, la mantenibilità e la riusabilità del codice. In questo post ti mostro come organizzare i dati usando Backbone.js.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/">HTML5 Mobile App: come definire la struttura dati</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Più volte ho discusso l&#8217;importanza di usare i pattern di <strong>sviluppo MVC</strong> nella realizzazione di applicazioni web ed HTML5 Mobile App realizzate in Javascript e CSS3: scrivere codice come capita e senza alcuna logica può andar bene per progetti di piccolissime dimensioni o singole pagine web, ma se stiamo parlando di una <em>single page application,</em> quindi un&#8217;applicazione in cui il codice lato-client gestisce, oltre ai dati, anche la generazione di markup, il discorso cambia.</p>
<p><img class="aligncenter wp-image-3869 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/javascript-spaghetti-code.jpg" alt="javascript-spaghetti-code" width="690" height="400" /></p>
<p>&nbsp;</p>
<h5><em>Spaghetti code</em></h5>
<p>E&#8217; ciò che dobbiamo evitare in quei casi. In altre parole dobbiamo evitare di sviluppare single page application e web app senza un&#8217;architettura logica che ci consenta di scrivere <strong>codice ben organizzato, facilmente leggibile, mantenibile e riusabile</strong>.</p>
<p>Questo è lo scopo principale dei metodi di sviluppo MVC.</p>
<p>Abbiamo visto quanto possono essere importanti le view nel web in generale e <a title="HTML5 Mobile App: l’importanza del framework MVC" href="http://www.upcreative.net/html5-mobile-app-limportanza-del-framework-mv/">perché considerare di usare un framework javascript MVC</a> per la realizzazione di HTML5 Mobile App.</p>
<p><em>In un post che ho scritto per YourInspirationWeb, metto in evidenza l&#8217;importanza dell&#8217;impiego delle view in ambito web ed il perchè esse sono così importanti:</em></p>
<ul>
<li><em><a title="HTML5 Mobile App: il web ha bisogno delle view" href="http://www.yourinspirationweb.com/2014/04/14/html-mobile-app-e-web-app-il-web-ha-bisogno-delle-view/">HTML5 Mobile App: il web ha bisogno delle view</a></em></li>
</ul>
<hr />
<p><em>#HTML5 #MobileApp definire la struttura dati con #backbonejs</em><br /><a href='https://twitter.com/share?text=%23HTML5+%23MobileApp+definire+la+struttura+dati+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>HTML5 Mobile App: MVC per rendere il javascript mantenibile e riusabile</h2>
<p><img class="aligncenter wp-image-3870 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/HTML5-Mobile-App-Javascript-MVC.jpg" alt="HTML5-Mobile-App-Javascript-MVC" width="690" height="347" /></p>
<p>Per molti anni il pattern di sviluppo MVC è stato usato in moltissimi linguaggi di sviluppo. Al giorno d’oggi, tutti i web designer e front-end developer hanno già cominciato da qualche tempo ad applicare la logica MVC al linguaggio che per noi risulta più rilevante: il Javascript.</p>
<p>Con il Javascript abbiamo a disposizione <a title="Creare applicazioni web: il pattern Model-View-Controller ed i principali MVC javascript frameworks" href="http://www.upcreative.net/creare-applicazioni-web-il-pattern-mvc-ed-i-principali-mvc-javascript-frameworks/">diversi tipi di frameworks</a> che offrono supporto per l’MVC nelle sue numerose variazioni ( la famiglia di pattern MV*), permettendoci di estendere la struttura delle nostre applicazioni senza troppe difficoltà.</p>
<p>Alcuni dei frameworks più famosi possono essere per esempio <a title="Backbone.js Javascript MVC framework" href="http://backbonejs.org/">Backbone</a> o <a title="Javascript MVC Frameworks" href="https://angularjs.org/">AngularJS</a>. Il loro ruolo è fondamentale, in quanto consentono allo sviluppatore di evitare la scrittura del codice in modalità <em>Spaghetti code</em>. Pertanto è importantissimo capire di cosa possiamo beneficiare con un adeguato pattern di programmazione.</p>
<p>In un precedente articolo avevo spiegato come realizzare una semplice HTML5 Mobile App con <em>Backbone.js</em>:</p>
<ul>
<li><a title="Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js" href="semplice-html5-mobile-app-bootstrap-ratchet-backbone-js">Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js</a></li>
</ul>
<p>In questo capitolo ti voglio mostrare più nel dettaglio una delle parti che compongono l’acronimo MVC: <strong>il model</strong> (o modello).</p>
<p>Lo farò in relazione ad uno dei sopra citati framework MVC, ovvero <b>Backbone.js, </b>che è proprio quello che approfondiremo per la realizzazione di HTML5 Mobile App.</p>
<h2>Gestire i dati con il model per una HTML5 Mobile App</h2>
<p><strong>I modelli costituiscono i dati dell’applicazione.</strong></p>
<p>Un modello può rappresentare per esempio un individuo, una nota, un articolo, un libro, o qualunque altra entità che possa avere 1 o più caratteristiche (nome, cognome, sesso, codice ISBN, matricola, colore, ecc..).</p>
<p>I modelli possono essere visti in modo completamente separato dagli elementi che compongono l’interfaccia-utente, anche se quando un modello subisce delle modifiche, esso normalmente avvisa gli “<strong>osservatori</strong>” (altre parti della struttura come per esempio le <em>view</em> &#8211; viste ) che si è verificato un cambiamento, permettendogli di agire di conseguenza.</p>
<p>Facciamo un esempio concreto al fine di comprendere meglio i modelli. Più nello specifico, prendiamo come punto di riferimento <a title="Tint Weather App - HTML5 Mobile App in CSS3 e Javascript" href="http://www.upcreative.net/tint-weather-app/">Tint</a>, la mia applicazione per il meteo.</p>
<p>In una normale applicazione meteo, il concetto di località ha bisogno di un suo modello che la rappresenti come un tipo di dato unico, con delle specifiche caratteristiche, che possono essere il nome (città o luogo), la latitudine, la longitudine, il paese di appartenenza ed altri possibili dati aggiuntivi.</p>
<p>Una specifica località potrebbe essere salvata nell’istanza di un model, che sarebbe accessibile e riusabile in più parti dell’applicazione.</p>
<p>Vediamo la definizione di un semplice modello che rappresenta il tipo di dati “località” con <em>Backbone.js</em>:</p><pre class="crayon-plain-tag">var LocationModel = Backbone.Model.extend({

	initialize:function () {
	//ci assicuriamo che ogni modello appena creato abbia un ordine numerico
	if( isNaN ( this.get(“order”) ) )
		this.set( {“order”, 0 } );
	},

	//dati predefiniti per la località

	defaults:{
		defaultLocation: false,
		userLocation: false,
		viewed: false
	}

});</pre><p>
<hr />
<p><em>#HTML5 #Mobileapp come definire un model con #Backbonejs</em><br /><a href='https://twitter.com/share?text=%23HTML5+%23Mobileapp+come+definire+un+model+con+%23Backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>La funzionalità integrate dei modelli variano a seconda del framework utilizzato, ma generalmente tutti i framework danno la possibilità di definire gli attributi, ovvero le proprietà di ogni modello, (come per esempio la cilindrata, il colore, la gamma o la marca per un ipotetico modello “macchina da strada”).</p>
<p>Backbone, come molti altri MVC frameworks, offre anche la possibilità di salvare i dati secondo varie modalità, come per esempio il <strong>localStorage</strong> o la <strong>sincronizzazione con un database</strong>.</p>
<p>Per avere maggiori informazioni sul metodo di salvataggio dei dati, ti consiglio di leggere  questo articolo che ho scritto per <a title="Your Inspiration Web" href="http://www.yourinspirationweb.com">YourInspirationWeb.com</a>:</p>
<ul>
<li><a title="HTML5 Mobile App: tecniche per il salvataggio dei dati" href="http://www.yourinspirationweb.com/2014/04/02/html5-mobile-app-tecniche-per-il-salvataggio-dei-dati/">HTML5 Mobile App: tecniche per il salvataggio dei dati</a></li>
</ul>
<h3>Gli osservatori dei modelli</h3>
<p>Un modello può avere anche diverse view (parti visuali dell&#8217;interfaccia) che lo stanno “osservando&#8221;, pronte a reagire ad eventuali cambiamenti.</p>
<p>Ritornando all’esempio di Tint, ogni località presenta la lista dei giorni e relativo meteo, oltre che una lista di orari, anch’essi ciascuno con la relativa condizione meteo.</p>
<p>L’applicazione usa 3 diverse view per ognuna delle località:</p>
<ul>
<li>la view per mostrare i dati principali e il meteo attuale del luogo</li>
<li>la view per mostrare il meteo nelle prossime ore della giornata</li>
<li>la view per mostrare il meteo nei prossimi giorni della settimana</li>
</ul>
<p>Tutte le view sopra elencate risultano “associate” allo stesso modello, e osservano eventuali cambiamenti che lo stesso può avere.</p>
<h2>Backbone.js e HTML5 Mobile App: le collection</h2>
<p>Nella maggior parte dei framework MV*, i modelli possono essere organizzati in gruppi: con <em>Backbone.js</em> tali gruppi vengono chiamati “<em>Collection</em>” (o collezioni).</p>
<p><strong>Gestire i modelli in collezioni</strong> aiuta a sviluppare applicazioni secondo una logica che permetta non osservare ciascun modello individualmente, ma reagire di conseguenza a qualunque modello che subisce delle modifiche in maniera “centralizzata”.</p>
<blockquote><p>Per comprendere meglio questo concetto, prendiamo di nuovo l&#8217;esempio su Tint: consideriamo 2 view in particolare, tra quelle che compongono l’interfaccia:</p>
<ul>
<li>la view <em>ManageLocations</em>: quella che consente di aggiungere, eliminare o modificare l’ordine delle località</li>
<li>la view <em>Locations</em>: che viene mostrata subito dopo l’avvio dell’applicazione ed offre all’utente la possibilità di scorrere orizzontalmente le varie località secondo l’ordine con cui esse sono state organizzate nella prima view menzionata. Questa view si preoccupa di creare per il modello di ogni località presente nella collection la relativa &#8220;sotto-view&#8221; inserendola al suo interno.</li>
</ul>
<p>L’applicazione è impostata in modo tale che la view “<em>Locations</em>&#8221; osservi i cambiamenti della collezione “<em>LocationCollection</em>”, la quale contiene tutti i modelli di ciascuna località aggiunta dall’utente, oltre a quella relativa alla sua posizione.</p>
<p>Così, non appena un‘utente aggiunge, elimina o modifica l’ordine di una località usando la view delle impostazioni (<em>ManageLocations</em>), la view <em>Locations</em> aggiunge la view associata al nuovo modello, rimuove quella del modello eliminato, o, qualora si trattasse di un riordinamento, reinizializza lo slider orizzontale.</p>
<p>&nbsp;</p></blockquote>
<p><img class="aligncenter wp-image-3872 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/04/HTML5-Mobile-App-osservatori-e-collection.jpg" alt="HTML5-Mobile-App---osservatori-e-collection" width="690" height="398" /></p>
<p><span style="color: #323333;">Di seguito ti mostro l’esempio della definizione di una <i>Collection di </i>località tramite <i>Backbone.js, </i>che ho usato per<i> Tint:</i></span></p><pre class="crayon-plain-tag">var LocationCollection = Backbone.Collection.extend({

	//definisce a quale modello di riferisce la collezione
	model: LocationModel,

	//definisco che il metodo di salvataggio per collection debba essere il localStorage (voglio salvare tutte le località aggiunte dall’utente nel dispositivo,
	//in modo da potergliele ripresentare al prossimo avvio)
	localStorage: new Backbone.LocalStorage("Parallax_Weather-locations"),

	//funzione che ho usato per generare in modo sequenziale l’ordine di ogni nuovo model,
	//per far sì che possa essere aggiunto all’ultimo posto

	nextLocation: function(newModel) {
		if (!this.length) return 1;
		return this.last().get('order') + 1;
	},

	//definisco la modalità di ordinamento dei modelli, in questo caso in base all’attributo ‘order'
	comparator: function(location) {
		return location.get("order");
	}

});</pre><p>
<h2>
<hr />
<p><em>#HTML5 #MobileApp definire un #collection con #Backbonejs</em><br /><a href='https://twitter.com/share?text=%23HTML5+%23MobileApp+definire+un+%23collection+con+%23Backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/' target='_blank'>Click To Tweet</a></p>
<hr /></h2>
<h2>Conclusioni</h2>
<p>L&#8217;astrazione dei dati è un fattore fondamentale nella realizzazione di qualsiasi progetto web, e lo diventa ancora di più nel caso di HTML5 Mobile App sviluppate in CSS3 e Javascript.</p>
<p>Grazie ai numerosi framework MVC (e tutte le varianti dell&#8217;MVC, solitamente indicate con MV*) è possibile organizzare i dati di un progetto secondo una struttura logica che consenta di modificarli facilmente, oltre che separare totalmente la loro gestione da quella dell&#8217;interfaccia e della <em>user-experience,</em> di cui solitamente si occupano altri componenti come <em>view</em> e <em>controllers</em>.</p>
<p>E tu? Cosa pensi dei javascript framework MVC? Fammelo Sapere nei commenti!
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando queste tecniche insieme a molte altre, ho realizzato <strong>più di 10 mobile app in HTML, CSS3 e Javascript</strong> (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab26116b4aa3-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab26116b4aa3-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/">HTML5 Mobile App: come definire la struttura dati</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/html5-mobile-app-come-definire-la-struttura-dati/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js</title>
		<link>https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/</link>
		<comments>https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/#comments</comments>
		<pubDate>Fri, 28 Mar 2014 14:07:15 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[Ratchet]]></category>
		<category><![CDATA[twitter bootstrap]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3486</guid>
		<description><![CDATA[<p>Ecco un altro tutorial su come realizzare un' HTML5 Mobile App in CSS3 e Javascript: in questo articolo ti mostro come usare la nuova versione di Ratchet (che ora fa parte di Twitter Bootstrap) insieme a Backbone.js per sviluppare una single page application. Il tutto nei tre stili differenti offerti da Ratchet, tra cui iOS e Android.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/">Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nonostante non sia d&#8217;accordo con l&#8217;idea di utilizzare un framework esterno &#8220;per intero&#8221; nello sviluppo di HTML Mobile App, sono comunque convinto che attingere CSS e stili da alcuni di essi possa notevolmente <strong>incrementare la qualità del prodotto</strong> finale e <strong>velocizzare il flusso di lavoro</strong>, evitando di reinventare ogni volta la ruota.</p>
<p>In un precedente articolo avevo parlato di <a title="8 mobile framework per la realizzazione di applicazioni mobile in HTML5, CSS3 e Javascript" href="http://www.upcreative.net/8-mobile-framework-per-applicazioni-html5-css-javascript/">8 mobile framework per la realizzazione di applicazioni mobile in HTML5, CSS3 e Javascript</a>, in cui ho inserito anche <strong>Ratchet</strong>, che offre stili CSS3 molto puliti ed un markup in linea con le moderne specifiche HTML5.</p>
<p>Dopo che lo scorso mese nel blog di Twitter Bootstrap <a title="Ratchet 2.0 e Twitter Bootstrap" href="http://blog.getbootstrap.com/2014/02/25/ratchet-2/">è stato annunciato</a> che <a href="http://goratchet.com/">Ratchet 2.0</a>  farà parte d&#8217;ora in poi dell&#8217;<a href="https://github.com/twbs">organizzazione Bootstrap</a>, ho deciso di rilasciare l&#8217;esempio di una semplice <strong>HTML5 Mobile App sviluppata con <a href="http://backbonejs.org/">Backbone.js</a></strong> usando gli stili (e solo gli stili) di questa nuova versione di <strong>Ratchet</strong>, la quale quale offre<span style="line-height: 1.5em;"> 3 ottimi skin di partenza: quello <strong>di base</strong>, quello stile <strong>iOS</strong>, e quello stile <strong>Android</strong>.</span></p>
<p>Cosa desideriamo di meglio?</p>
<p style="text-align: center;"><img class="size-full wp-image-3495 aligncenter" src="http://www.upcreative.net/wp-content/uploads/2014/03/HTML5-Mobile-App-con-Bootstrap-Ratchet2-Backbone.js.jpg" alt="HTML5-Mobile-App-con-Bootstrap-Ratchet2-Backbone.js" width="690" height="400" /></p>
<p>L&#8217;intento è quello di realizzare una view iniziale con un <em>header, </em>un <em>sub-header</em> contenente un <em>input</em> di ricerca, ed il contenitore per mostrare una lista di articoli; grazie all&#8217;<em>input</em> di ricerca l&#8217;utente può filtrare i contenuti della lista.</p>
<p>L&#8217;applicazione è quindi composta da <strong>3 backbone view</strong>:</p>
<ul>
<li>la prima rappresenta la schermata principale contenente <em>header</em> e <em>sub-header</em></li>
<li>la seconda rappresenta la view della lista</li>
<li>la terza rappresenta ogni articolo che dovrà essere inserito nella lista</li>
</ul>
<p>Come nello <a title="Come creare una HTML5 Mobile App con Backbone.js" href="http://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">scorso esperimento</a>, lavoreremo sempre con <strong>model</strong> e <strong>collection</strong> per definire rispettivamente il modello di articolo e la collezione per la lista degli articoli.</p>
<p>Ecco lo schema del funzionamento dei vari componenti che formano la nostra HTML5 Mobile App:</p>
<p style="text-align: center;"><span style="color: #ff0000;"><img class="size-full wp-image-3494 aligncenter" src="http://www.upcreative.net/wp-content/uploads/2014/03/composizione-backbone-views.jpg" alt="composizione-backbone-views" width="690" height="400" /></span></p>
<p style="text-align: left;">
<hr />
<p><em>Semplice #HTML5 #MobileApp con #Bootstrap #Ratchet e #Backbonejs</em><br /><a href='https://twitter.com/share?text=Semplice+%23HTML5+%23MobileApp+con+%23Bootstrap+%23Ratchet+e+%23Backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Trovi le <strong>DEMO</strong> dei 3 diversi stili ed il <strong>DOWNLOAD</strong> alla fine di questo articolo!</p>
<h3>HTML5 mobile app: impostazione del documento</h3>
<p>Come prima cosa andiamo a scaricare lo <em>zip </em>di Ratchet dal sito ed includiamo nel nostro documento solo gli stili CSS ed il <em>font</em> per le icone. Per usare lo stile base dovremo includere solo il file &#8216;<em>ratchet.css</em>&#8216; o &#8216;<em>ratchet.min.css</em>&#8216;, mentre per gli stili iOS o android dovremo aggiungere anche i rispettivi file &#8216;<em>ratchet-theme-ios.css</em>&#8216; o &#8216;<em>ratchet-theme-android.css</em>&#8216;.</p>
<p>Ecco l&#8217;esempio per l&#8217;utilizzo del tema iOS:</p><pre class="crayon-plain-tag">&lt;!-- includiamo gli stili di base di  Ratchet.css  --&gt;
&lt;link href="css/ratchet/css/ratchet.css" rel="stylesheet"&gt;

&lt;!-- includiamo gli stili iOS di  Ratchet.css  --&gt;
&lt;link href="css/ratchet/css/ratchet-theme-ios.css" rel="stylesheet"&gt;</pre><p>
Poi inseriamo nel documento le varie librerie <em>javascript</em>, prima della chiusura del tag <em>&lt;/body&gt; </em>in modo da velocizzare il caricamento della pagina:</p><pre class="crayon-plain-tag">&lt;!-- Includo gli scripts in fondo alla pagina per velocizzarne il caricamento --&gt;
&lt;script src="js/jquery-1.10.2.min.js"&gt;&lt;/script&gt;
&lt;!-- Includiamo anche underscore.js libreria a cui si appoggia backbone.js --&gt;
&lt;script src="js/underscore.js"&gt;&lt;/script&gt; 
&lt;script src="js/backbone.js"&gt;&lt;/script&gt;    
&lt;!-- il file javascript del nostro esperimento--&gt;
&lt;script src="js/demo.js"&gt;&lt;/script&gt;</pre><p>
<h2>Definizione di model e collection</h2>
<p>Vediamo come definire il model e la collection deli articoli:</p><pre class="crayon-plain-tag">//definiamo il modello di un articolo
var ArticleModel = Backbone.Model.extend({

    // all'inizializzazione di ogni modello creiamo la relativa anteprima
    initialize: function(){
        var article = this.get("article");
        this.set("preview", article.substr(0, 70)+"...");
    },

    // Attributi predefiniti per il modello, che vengono usati 
    //se non passati al momento dell'inizializzazione    
    defaults: {
        id: new Date().getUTCMilliseconds(), //impostiamo un id univoco in base alla data 
        title: "Nessun titolo",
        article: "",
        image: false,
        createdat: new Date()
    } 
});

//definiamo la collection per la lista degli articoli
var ArticleList = Backbone.Collection.extend({ 
    //Impostiamo la referenza al model per questa collection.
    model: ArticleModel,

    //funzione che restituisce il numero seriale per l'id di ogni nuovo articolo
    nextId: function() {
        if (!this.length) return 1;
        return this.first().get('test') + 1; 
    },

    //la funzione per la ricerca, che restituisce solo i models degli articoli
    //che contengono il termine ricercato nel titolo (la usaeremo per la ricerca)
    search : function(term){
        if(term == "") return this;

        var pattern = new RegExp(term,"gi");
        return _(this.filter(function(data) {
            return pattern.test(data.get("title"));
        }));
    }
});</pre><p>
<h2>Le view</h2>
<p>Ecco come si presenta la view principale:</p><pre class="crayon-plain-tag">//definiamo la view principale della nostra app
var StartView = Backbone.View.extend({

    // comunichiamo a backbone che deve inserire il markup del template di questa view all'interno di un oggetto dal tag 'section'
    tagName:  "section",

    //settiamo la classe che deve avere il tag 'section'
    className: "page-wrapper",

    //impostaiamo l'id del template da cui generare il markup di questa view
    template: "#startview-template",

    initialize: function() {

        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        //inizializziamo la view della lista degli articoli
        this.resultsView = new ListView({collection: this.collection});
    },

    //funzione che genera il markup di questa view
    render: function () {
        this.$el.html(this.template()); //genero l'html di questa view 
        //inserisco l'html della view dei risultati ti ricerca nella div con classe '.content' presente in questa view
        this.$('.content').append(this.resultsView.render().el); 
        return this;
    },

    // Deleghiamo gli eventi per la ricerca sull'input di testo 
    events: {
        //evento //selettore    //funzione da eseguire
        "keyup .search-term":    "search",
        "keypress .search-term": "onkeypress"
    },

    //funzione che richiama il methodo 'renderList' della view della lista ad ogni keyup sull'input di ricerca
    search: function (e) {
        var term = $(e.currentTarget).val();
        //se il termine non è vuoto allora richiamo il 'renderList' passando i dati filtrati,
        //altrimenti richiamo il render per mostrare la lista intera
        if(term!="") 
            this.resultsView.renderList(this.collection.search(term));
        else
            this.resultsView.render();
    },

    onkeypress: function (e) {
        if (e.keyCode === 13) { // preveniamo il normale evento di invio con il pulsante 'Enter'
            e.preventDefault();
        }
    }
});</pre><p>
Avremmo potuto anche &#8220;unificare&#8221; entrambe le <em>view</em> (quella principale e quella del contenitore della lista) in un unica <em>view</em>, ma lasciandole separate riusciamo ad ottenere un <strong>progetto più scalabile e dinamico</strong>: potremmo per esempio inserire nell&#8217;elemento &#8216;<em>.content</em>&#8216; della view principale qualsiasi altra <em>view,</em> oltre a quella della lista. Ciò ci permetterebbe di usare la view principale per più di uno scopo.</p>
<p>Ora vediamo la view del contenitore della lista, che sarà applicata appunto all&#8217;interno dell&#8217;elemento DOM con classe &#8216;<em>.content</em>&#8216; della view principale:</p><pre class="crayon-plain-tag">//view per la lista degli articoli (viene inizializzata all'interno della view 'StartView')
var ListView = Backbone.View.extend({

    // comunichiamo a backbone che deve inserire il markup del template di questa view all'interno di un 'ul'
    tagName:'ul',

    //questa view non ha bisogno di template, perchè viene popolata con le varie view 'ListItemView'
    //relative ad ogni model presente nella collection

    //impostiamo la classe che deve avere il contenitore di questa view
    className:'table-view',

    initialize:function () {

    },

    //funzione per mostrare la lista completa all'avvio dell'ìapplicazione
    render : function(articles){
        var _this = this;   
        this.$el.empty(); 

        //per ogni elemento della collection creiamo una nuova view
        this.collection.each(function(task){
            var view = new ListItemView({ model: task });
            _this.$el.append(view.render().el);
        });
        return this;
    },

    //funzione che viene richiamata al momento della ricerca, alla quale vengono passati i model che 
    //soddisfano la ricerca
    renderList : function(articles){
        var _this = this;        
        this.$el.empty(); 

        //anche qui per ogni model creo la relativa view
        articles.each(function(task){
            var view = new ListItemView({ model: task });
            _this.$el.append(view.render().el);
        });
        return this;
    }

});</pre><p>
Questa view si preoccupa di mostrare inizialmente tutti i <em>model</em> (quindi gli articoli) presenti all&#8217;interno della <em>collection, </em>mentre tramite il metodo &#8216;<em>renderList</em>&#8216; mostra solamente la lista di articoli che viene passata come parametro. Tale metodo viene richiamato dalla <em>view</em> principale al momento in cui si verifica l&#8217;evento &#8216;<em>keyup</em>&#8216; sull&#8217;<em>input</em> di ricerca.</p>
<p>Per mostrare i risultati al suo interno, la view della lista provvede alla creazione di una nuova view &#8216;<em>ListItemView</em>&#8216; per ogni <em>model </em>degli articoli<em>,</em> sia all&#8217;interno del metodo &#8216;<em>render</em>&#8216; che del metodo &#8216;<em>renderList</em>&#8216;:</p><pre class="crayon-plain-tag">//view per ogni elemento da inserire nella lista dei risultati degli articoli (viene inizializzata all'interno della view 'ListView')
var ListItemView = Backbone.View.extend({

    //il tag da usare per il contenitore del markup
    tagName:"li",

    //la classe da associare al contenitore del markup
    className: "table-view-cell",

    //impostaiamo l'id del template da cui generare il markup di questa view
    template: "#listitemview-template",

    initialize:function () {

        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        //se il model associato subisce delle modifiche allora richiamiamo il render per aggiornare il markup 
        //(non usato in questa demo)
        this.model.on("change", this.render, this);
        //se il model associato viene eliminato, allora richiamiamo la funzione 'close' che ne rimuove il 
        //relativo DOM dal documento (non usato in questa demo)
        this.model.on("destroy", this.close, this);
    },

    //genriamo il markup passando al template compilato i dai del model dell'articolo in formato JSON
    render:function () {
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    },

    close: function(){
        //elimina il DOM di questa view dal documento ed annulla gli eventi applicati nella funzione 'initialize'
        this.remove();
    }

});</pre><p>
<h2>I template e la generazione del markup</h2>
<p>Come al solito utilizziamo il <strong>sistema di templating</strong> di <strong><em>underscore.js</em></strong> per la generazione del markup di ogni <em>view</em>, considerando che la <em>view</em> della lista non ha bisogno di un template, perché come abbiamo visto il <em>markup</em> da inserire al suo interno è costituito dalle varie <em>view</em> degli articoli.</p>
<p>Per avere maggiori informazioni sui sistemi di Javascript templating, ottimi per progetti di tipo &#8220;<em>Single-Page-Application</em>&#8220;, ti consiglio di leggere questo mio precedente articolo:</p>
<ul>
<li><a title="I sistemi di Javascript templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">I sistemi di Javascript templating e le migliori librerie</a></li>
</ul>
<p>Vediamo quindi i due template da inserire all&#8217;interno del documento:</p><pre class="crayon-plain-tag">&lt;!-- template per la view di ogni elemento all'interno della lista dei risultati di ricerca (ListItemView su demo.js) --&gt;
&lt;script type="text/template" id="listitemview-template"&gt;

	&lt;a href="#" data-id="&lt;%= id %&gt;" class="push-right"&gt;
	    &lt;span class="badge"&gt;
	    	&lt;%=createdat.getDate()%&gt; / &lt;%=createdat.getMonth()+1%&gt;
	    &lt;/span&gt;
	    &lt;%if(image){%&gt;
		&lt;img class="media-object pull-left" src="images/&lt;%=image%&gt;" /&gt;
		&lt;%}%&gt;
	    &lt;div class="media-body"&gt;
	        &lt;%= title %&gt;
	        &lt;p&gt;&lt;%= preview %&gt;&lt;/p&gt;
	    &lt;/div&gt;
	&lt;/a&gt;

&lt;/script&gt;

&lt;!-- template per la view del contenuto iniziale  (StartView su demo.js) --&gt;
&lt;script type="text/template" id="startview-template"&gt;

	&lt;header class="bar bar-nav"&gt;
		&lt;button class="btn btn-link btn-nav pull-left" onclick="window.location.href='http://www.upcreative.net/iscriviti-alla-newsletter/'"&gt;
		    Altre guide
		&lt;/button&gt;
	    &lt;h1 class="title"&gt;Ultimi Articoli&lt;/h1&gt;
	    &lt;button class="btn btn-link btn-nav pull-right" onclick="window.location.href='http://www.upCreative.net'"&gt;
		    upCreative.net
		&lt;/button&gt;
	&lt;/header&gt;
	&lt;div class="bar bar-standard bar-header-secondary"&gt;
	    &lt;input class="search-term" placeholder="Cerca articoli" type="text"/&gt;
	&lt;/div&gt;
	&lt;div class="content"&gt;&lt;/div&gt;

&lt;/script&gt;</pre><p>
<h2>Avviamo l&#8217;applicazione</h2>
<p style="text-align: center;"><img class="size-full wp-image-3497 aligncenter" src="http://www.upcreative.net/wp-content/uploads/2014/03/Avvio-HTML5-Mobile-App-Ratchdet-e-Backbonejs.jpg" alt="Avvio-HTML5-Mobile-App-Ratchdet-e-Backbonejs" width="690" height="280" /></p>
<p>Una volta impostati tutti i componenti necessari, passiamo all&#8217;avvio dell&#8217;applicazione, inizializzando una nuova <em>collection</em> per gli articoli con dei dati iniziali:</p><pre class="crayon-plain-tag">$(function(){

	//creiamo una nuova istanza per la collection degli articoli con 4 models iniziali
    var articles = new ArticleList([
        {
            title: "App su upCreative.net",
            image: "1.jpg",
            article: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
        },
        {
            title: "Secondo articolo su upCreative.net",
            image: "2.jpg",
            article: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur"
        },
        {
            title: "Articolo senza immagine 3",
            image: "3.jpg",
            article: "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quarto articolo sulla  lista",
            image: "4.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quinto articolo sulla  lista",
            image: "5.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Sesto articolo sulla  lista",
            image: "1.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Settimo articolo sulla  lista",
            image: "2.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        }
    ]);
    //creiamo una nuova istanza per la view iniziale 
    //associandogli la collection appena creata e popolata
    var startView = new StartView({
        collection : articles
    });
    $("body").append(startView.render().el);

});</pre><p>
<h2></h2>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Backbone.js e Ratchet HTML5 mobile app: il risultato</h2>
<p>Vediamo il risultato live nei 3 skin differenti offerti da Ratchet:
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Stile di base</h3>
<div style="background-image: url('http://www.upcreative.net/wp-content/uploads/2014/03/iphone5.png'); background-repeat: no-repeat; margin: 0 auto; padding: 145px 0px 0px 27px; width: 375px; height: 690px;"><iframe width="320" height="550" src="http://www.upcreative.net/tutorials/28032014HTML5-Mobile-App-Ratchet2-e-Backbonejs/"></iframe></div>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Stile di iOS</h3>
<div style="background-image: url('http://www.upcreative.net/wp-content/uploads/2014/03/iphone5.png'); background-repeat: no-repeat; margin: 0 auto; padding: 145px 0px 0px 27px; width: 375px; height: 690px;"><iframe width="320" height="550" src="http://www.upcreative.net/tutorials/28032014HTML5-Mobile-App-Ratchet2-e-Backbonejs/index-ios.html"></iframe></div>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Stile di Android</h3>
<div style="background-image: url('http://www.upcreative.net/wp-content/uploads/2014/03/iphone5.png'); background-repeat: no-repeat; margin: 0 auto; padding: 145px 0px 0px 27px; width: 375px; height: 690px;"><iframe width="320" height="550" src="http://www.upcreative.net/tutorials/28032014HTML5-Mobile-App-Ratchet2-e-Backbonejs/index-android.html"></iframe></div>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-star"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Aiutami a condividere la risorsa per ottenere il <strong>download</strong>:</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-star"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab26116c8045-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab26116c8045-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/">Semplice HTML5 Mobile App con Bootstrap Ratchet e Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Come creare una HTML5 Mobile App con Backbone.js</title>
		<link>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/</link>
		<comments>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/#comments</comments>
		<pubDate>Sat, 15 Mar 2014 13:29:25 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3432</guid>
		<description><![CDATA[<p>Ecco un'altro tutorial che spiega come realizzare HTML5 Mobile App: in questa guida ti mostro come servirsi del framework javascript Backbone.js per sviluppare una semplicissima applicazione che dispone alcuni articoli in un lista e permette di visualizzare i dettagli dell'oggetto selezionato. Il tutto attraverso animazioni CSS3 fluide e performanti e sfruttando la tecnica dell'accelerazione hardware.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare una HTML5 Mobile App con Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Nella realizzazione di <strong>applicazioni mobile in HTML5, CSS3 e Javascript</strong> o qualunque tipo di <strong>web app</strong>, il modo in cui viene organizzata la struttura del progetto gioca un ruolo fondamentale dal punto di vista del risultato finale. Fattori come <strong>fluidità</strong>, <strong>prestazioni</strong> e qualità della <em>user-experience</em>, ma anche la velocità di sviluppo, sono incredibilmente influenzati dal mondo in cui suddividiamo i vari componenti dell&#8217;<strong>interfaccia</strong>.</p>
<p>Vale la pena pertanto dedicare un&#8217;attenzione particolare a questo aspetto.</p>
<p>Quando parliamo di &#8220;struttura&#8221; di un&#8217;applicazione ci riferiamo generalmente al modo in cui vengono organizzati gli elementi che la compongono per poter interagire in modo logico tra di loro. Uno dei pattern (o logiche di organizzazione) più comuni per gestire questi tipi di elementi è il <strong>pattern MVC</strong>, che basa la sua logica su elementi come <strong>viste</strong> (<em>view</em>), <strong>modelli</strong> (<em>model</em>) e <strong>collezioni di modelli</strong> (<em>collection</em>).</p>
<p><em>Per approfondire il discorso del pattern MVC e dei framework di cui ci possiamo servire per implementarli al meglio nei nostri progetti, ti consiglio di leggere questo mio articolo :</em></p>
<ul>
<li><em><a title="Creare applicazioni web: il pattern MVC ed i principali framework Javascript" href="http://www.upcreative.net/creare-applicazioni-web-il-pattern-mvc-ed-i-principali-mvc-javascript-frameworks/http://www.upcreative.net/creare-applicazioni-web-il-pattern-mvc-ed-i-principali-mvc-javascript-frameworks/">Creare applicazioni web: il pattern MVC ed i principali framework Javascript</a></em></li>
</ul>
<p>Ho realizzato oltre 10 applicazioni mobile per i miei clienti, tra cui due progetti personali (<a title="Tint Weather App e Dieta Si o NO - HTML5 Mobile App realizzate in HTML, CSS e Javascript" href="http://www.upcreative.net/html5-mobile-apps/">Tint Weather App e Dieta SI o NO?</a>) e gran parte di essi sono stati sviluppati con il pattern MVC grazie al Framework <strong><a title="Backbone.js - Javascript MVC Framework" href="http://www.upcreative.net/mvc-backbone-per-html5-css3-javascript-web-app/">Backbone.js</a> </strong>abbinato al <strong>sistema di templating</strong> di <a href="http://underscorejs.org">Underscore.js</a>, che rendono molto più semplice lavorare con la logica MVC.</p>
<p><em>Il sistema di templating è una libreria utile per la generazione di markup HTML via client (quindi tramite javascript) combinando dei dati (generalmente in formato JSON) con un template precedentemente compilato. Per avere maggiori informazioni sui sistemi di templating ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><span style="text-decoration: underline;"><em><a title="Web Application: i sistemi di templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">Web Application: i sistemi di templating e le migliori librerie</a></em></span></li>
</ul>
<p>In questo articolo ti voglio mostrare come poter realizzare una semplicissima HTML5 Mobile App di base, con Bakcbone.js e delle animazioni CSS3 fluide e performanti, che sfruttano la tecnica dell&#8217;<a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">accelerazione hardware</a>.</p>
<hr />
<p><em>Come creare una #HTML5 #MobileApp con #Backbonejs ed il pattern #MVC</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23HTML5+%23MobileApp+con+%23Backbonejs+ed+il+pattern+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>HTML5 Mobile App: l&#8217;obiettivo finale</h2>
<p>L&#8217;obiettivo di questo esperimento è quello di capire il meccanismo di <em>views</em>, <em>models</em> e <em>collection</em> realizzando una semplicissima mobile app che mostra una serie di articoli (o news) su una lista, permetta di aggiungere nuovi articoli programmaticamente, e visualizzare il dettaglio di quelli cliccati nella lista attraverso una view che a comparsa che &#8220;entra in scena&#8221; grazie ad <strong>animazioni CSS3 performanti</strong>.</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/HTML5-Mobile-App-Backbonejs.jpg"><img class="size-full wp-image-3438 aligncenter" alt="HTML5-Mobile-App-Backbonejs" src="http://www.upcreative.net/wp-content/uploads/2014/03/HTML5-Mobile-App-Backbonejs.jpg" width="690" height="400" /></a></p>
<blockquote><p>Se se un web designer e vorresti creare la tua applicazione in HTML5, CSS3 e Javascript, forse ti potrebbe interessare il mio e-book: <a title="HTML Mobile Accelerato - Guida per web designer su come realizzare HTML Mobile App in CSS3 e Javascript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a></p></blockquote>
<p style="text-align: center;">Trovi <strong>DEMO</strong> e <strong>DOWNLOAD</strong> in fondo all&#8217;articolo.</p>
<h2><span style="color: #000000;">Impostazione del documento</span></h2>
<p>Come prima cosa includiamo nel documento le librerie di cui abbiamo bisogno; in particolare all&#8217;interno del tag <em>&lt;body&gt; </em>inseriamo il link alla libreria <strong><a href="http://modernizr.com/">Modernizr</a></strong>, che ci servirà per gestire l&#8217;evento di fine animazione (&#8216;<em>endanimation</em>&#8216;) di entrata per la view che mostra i dettagli dell&#8217;articolo (per approfondire il discorso di come controllare le animazioni con <em>Modernizr</em>, di consiglio di leggere <a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">questo articolo</a>).</p><pre class="crayon-plain-tag">&lt;head&gt;
 &lt;script src="js/modernizr.custom.js"&gt;&lt;/script&gt;
&lt;/head&gt;</pre><p>
Proseguiamo includendo prima della chiusura del body (<em>&lt;/body&gt;</em>) le altre librerie:</p><pre class="crayon-plain-tag">&lt;!-- Includo gli scripts in fondo alla pagina per velocizzarne il caricamento --&gt;
 &lt;script src="js/jquery-1.10.2.min.js"&gt;&lt;/script&gt;
 &lt;!-- Includiamo anche underscore.js libreria a cui si appoggia backbone.js --&gt;
 &lt;script src="js/underscore.js"&gt;&lt;/script&gt; 
 &lt;script src="js/backbone.js"&gt;&lt;/script&gt;    
 &lt;!-- il file javascript del nostro esperimento--&gt;
 &lt;script src="js/demo.js"&gt;&lt;/script&gt;</pre><p>
<h2>Il markup HTML</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg"><img class="size-full wp-image-3440 aligncenter" alt="markup-html" src="http://www.upcreative.net/wp-content/uploads/2014/03/markup-html.jpg" width="690" height="200" /></a></p>
<p>Vediamo ora come impostare il markup HTML all&#8217;interno del documento:</p><pre class="crayon-plain-tag">&lt;!-- header della schermata --&gt;
&lt;nav class="header"&gt;
	&lt;a class="left" href="http://www.upcreative.net/iscriviti-alla-newsletter/"&gt;&lt;i class="fa fa-globe"&gt;&lt;/i&gt; Ulteriori guide&lt;/a&gt;			
	&lt;button href="#" class="right" data-js="new"&gt;&lt;i class="fa fa-plus"&gt;&lt;/i&gt; Nuovo articolo&lt;/button&gt;
	&lt;h1 class="title"&gt;HTML5 Mobile App&lt;/h1&gt;
&lt;/nav&gt;

&lt;!-- wrapper il contenuto della lista --&gt;
&lt;section class="content"&gt;
	&lt;h1&gt;Articoli&lt;/h1&gt;		
	&lt;ul class="list-group" data-js="list"&gt;

	&lt;/ul&gt;
&lt;/section&gt;

&lt;!-- 
	template che useremo per la view del dettaglio della news: il browser ingnora questa parte di codice, poichè all'interno
	del tag 'script', ma possiamo invece risalire a questo template da javacript, tramite l'id
--&gt; 
&lt;script type="text/template" id="article-template"&gt;

	&lt;!-- header della schermata --&gt;
	&lt;nav class="header"&gt;
		&lt;button class="right" data-js="close"&gt;&lt;i class="fa fa-times-circle"&gt;&lt;/i&gt;&lt;/button&gt;
		&lt;h1 class="title"&gt;Dettalgi articolo&lt;/h1&gt;
	&lt;/nav&gt;

	&lt;!-- wrapper per le tab della schermata --&gt;
	&lt;section class="content"&gt;		

		&lt;h1&gt;&lt;%=title%&gt;&lt;/h1&gt;
		&lt;p&gt;Data: &lt;%=createdat.getDate()%&gt; / &lt;%=createdat.getMonth()+1%&gt; / &lt;%=createdat.getFullYear()%&gt;&lt;/p&gt;
		&lt;article&gt;

			&lt;!-- 
			il sistema di templating permette di usare i normali controlli Javascript, 
			in modo da poter controllare se è presente o meno l'immagine per l'articolo 
			--&gt; 

			&lt;%if(image){%&gt;
			&lt;img src="images/&lt;%=image%&gt;" /&gt;
			&lt;%}%&gt;

			&lt;%=article%&gt;

		&lt;/article&gt;

	&lt;/section&gt;

&lt;/script&gt;</pre><p>
Il codice che si trova all&#8217;interno del tag <em>&lt;script type=&#8221;text/template&#8221; id=&#8221;article-template&#8221;&gt;&lt;/script&gt;</em> rappresenta il markup che verrà utilizzato dalla view Backbone.js per la visualizzazione del dettaglio dell&#8217;articolo.</p>
<h2>Il file Javascript</h2>
<p>All&#8217;interno del nostro file Javascript (<em>demo.js</em>) come prima cosa salviamo in una variabile il nome dell&#8217;evento di fine animazione tramite Modernizr, che verrà utilizzato nella view del dettaglio dell&#8217;articolo:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine animazione, che cambia a seconda del browser */

var animEndEventNames = {
	'WebkitAnimation' : 'webkitAnimationEnd',
	'OAnimation' : 'oAnimationEnd',
	'msAnimation' : 'MSAnimationEnd',
	'animation' : 'animationend'
};
var animEndEventName = animEndEventNames[ Modernizr.prefixed( 'animation' ) ];</pre><p>
Il passo successivo è subito quello di definire il modello (<em>model</em>) Backbone per rappresentare ogni articolo, e la relativa collezione (<em>collection</em>):</p><pre class="crayon-plain-tag">//definiamo il modello di un articolo
var ArticleModel = Backbone.Model.extend({

    // Attributi predefiniti per il modello, che vengono usati 
    //se non passati al momento dell'inizializzazione    
    defaults: {
        title: "Nessun titolo",
        article: "",
        image: false,
        createdat: new Date()
    }, 
    //elimina l'istanza del model
    clear: function() {
        this.destroy();
    }

});

//definiamo la collection per la lista degli articoli
var ArticleList = Backbone.Collection.extend({ 
    //Impostiamo la referenza al model per questa collection.
    model: ArticleModel
});</pre><p>
Fatto ciò passiamo alla definizione delle <em>views</em> che controllano parte dell&#8217;interfaccia della nostra HTML5 Mobile App.</p>
<p>In particolare useremo due <em>views: </em></p>
<ul>
<li>la prima, ovvero quella che rappresenta l&#8217;app principale, è applicata al body e quindi non deve preoccuparsi di generare nuovo markup HTML, ma di usare quello che abbiamo già inserito nel documento</li>
<li>la seconda, ovvero quella che rappresenta il pannello che mostra i dettagli dell&#8217;articolo, si servirà della parte di markup che abbiamo precedentemente inglobato nel tag <em>&lt;script&gt; </em>con id &#8216;<em>article-template</em>&#8216;.</li>
</ul>
<h4>View generale</h4>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-list-view.jpg"><img class="size-full wp-image-3439 aligncenter" alt="html5-mobile-app-list-view" src="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-list-view.jpg" width="320" height="505" /></a></p>
<pre class="crayon-plain-tag">//definiamo la view dell'app intera
var AppView = Backbone.View.extend({

    //a differenza della view di dettaglio dell'articolo, dove impostavamo 
    //quale elemento generare al'inizializzazione, qui comunichiamo 
    //quale oggetto già aesistente utilizzare come markup
    el: "body",

    // Deleghiamo gli eventi per la creazione di un nuovo 
    //articolo (il funzionamento ed i selettori sono come quelli di jQuery).
    events: {
    	//evento //selettore 	 //funzione da eseguire
        "click [data-js=list] a":  "showArticle",
        "click [data-js=new]":  "newArticle"
    },

    // Nella funzione di inizializzazione osserviamo l'evento add 
    //della collection legata a questa view, per richiamare la funzione che 
    // inserisce un nuovo elemento nella lista DOM
    initialize: function() {

        //deleghiamo gli eventi della collection alle relative funzioni 

        //evento che si verifica quando un nuovo model viene aggiunto alla collection
        // l'ultimo parametro è una funzione alla quale viene passata l'istanza del model appena aggiunto
        // alla collection
        this.listenTo(this.collection, 'add', this.addArticle);

        //richiamiamo la funzione che aggiunge gli elementi all alla lista
        this.addElements();
    },

    // funzione che crea una nuova view ed aggiunge 
    // l'elemento generato dal render alla lista, in base al modello passato ('articleModel')
    addArticle: function(articleModel) {           
        //qui, per mostrare una soluzione diversa, generiamo del markup senza ricorrere ad una view a se stante
        var compiledTemplate = _.template('&lt;a href="#" class="list-group-item"&gt;&lt;%=title %&gt; - &lt;span class="text-muted"&gt;&lt;%=createdat.getDate()%&gt; / &lt;%=createdat.getMonth()+1%&gt; / &lt;%=createdat.getFullYear()%&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;');
        //aggiungiamo alla lista il markup generato dal sistema di templating, passando i dati in formato Json del model
        this.$("[data-js=list]").append( compiledTemplate(articleModel.toJSON()) );
    },

    showArticle: function(e) {  
    	e.preventDefault();
    	var item = $(e.currentTarget), 					//riprendiamo l'oggetto jQuery del link appena cliccato
    		index = item.index(),	   					//riprendiamo l'indice sulla lista dell'oggetto appena cliccato
    		articleModel = this.collection.at(index);   //riprendiamo il model dalla collection degli articoli in base all'indice

        //creaiamo una nuova istanza della view dell'articolo passando come model quello dell'articolo cliccato
        var view = new ArticleView({model: articleModel});
        //aggiungiamo all'elemento di questa view (quindi il body della pagina) l'oggetto DOM generato dalla funzione di render della view appena istanziata
        this.$el.append(view.render().el);
        //richiamiamo il metodo "show()" interno della view appena creata per avviare l'animazione di entrata
        view.show();    
    },

    // Aggiunge nella lista tutti gli elementi della collection di individui.
    addElements: function() {
        this.collection.each(this.addArticle);
    },

    newArticlesCoounter: 0,
    newArticle: function(){
    	this.newArticlesCoounter++;

    	//creo un nuovo model per l'articolo
    	var newModel = new ArticleModel({
    		title: "Nuovo articolo "+this.newArticlesCoounter,
    		article: "BOOM! Corpo nuovo articolo.."
    	});
    	//aggiungo il model alla collection, in modo da innescare la funzione 'addArticle', 
    	//come stabilito all'interno della funzione 'initialize' di questa view
    	this.collection.add(newModel);

    }
});</pre>
<h4> View di dettaglio</h4>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-details.jpg"><img class="size-full wp-image-3441 aligncenter" alt="html5-mobile-app-details" src="http://www.upcreative.net/wp-content/uploads/2014/03/html5-mobile-app-details.jpg" width="320" height="505" /></a></p>
<pre class="crayon-plain-tag">//view per il dettaglio dell'articolo
var ArticleView = Backbone.View.extend({

    // diciamo a backbone che deve inserire il markup del template di questa view all'interno di un oggetto dal tag 'section'
    tagName:  "section",

    //settiamo la classe che deve avere il tag 'section'
    className: "article-wrapper",

 	//impostaiamo l'id del template da cui generare il merkup di questa view
    template: "#article-template",

    //impostazione degli eventi per l'interazione dell'utente (il funzionamento ed i selettori sono come quelli di jQuery).
    events:{
    	//evento //selettore 	 //funzione da eseguire
    	"click [data-js=close]": "hide"
    },

 	//la funzione che viene eseguita al momento dell'inizializzazione di questa view
    initialize: function() {
        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        //rimuoviamo il modal dal DOM quando esso viene nascosto
        this.$el.on("hidden.bs.modal", function(){
            this.remove();
        });
    },

    // Effettua il render del markup della view per il dettaglio dell'articolo, in base al modello con cui questa view è stata inizializzata.
    render: function() {
        $(this.el).html(this.template(this.model.toJSON()));        
        return this;
    },

 	//funzione che mostra l'elemento DOM nell'interfaccia
    show: function(){
    	//aggiungendo la classe 'show-article' al contenitore di questa view 
    	//(elemento 'section.article-wrapper') inneschiamo l'animazione di entrata
        this.$el.addClass("show-article");        
    },
    //funzione che nasconde l'elemento DOM dall'interfaccia
    hide: function(){
    	var _this = this;
    	//aggiungendo la classe 'hide-article' al contenitore di questa view 
    	//(elemento 'section.article-wrapper') inneschiamo l'animazione di uscita
        _this.$el.addClass("hide-article");        
        //al termine della'animazione, rimuoviamo l'oggetto DOM dal documento tramite il metodo backbone 'remove()', in modo da alleggerire il lavoro 
        //della memoria centrale del dispositivo, contribuendo a rendere la nostra applicazione più fluida e performante 
        _this.$el.on( animEndEventName ,function(){
        	_this.remove();
        });        
    }

});</pre>
<h2>Il codice CSS</h2>
<p>Per quanto riguarda gli <strong>stili CSS3</strong>, abbiamo utilizzato delle posizioni assolute per elementi come l&#8217;<em>header, </em>il contenitore della lista ed il tag &lt;<em>section&gt; </em>legato alla view del dettaglio. A quest&#8217;ultimo abbiamo inoltre applicato la tecnica dell&#8217;<strong>accelerazione hardware</strong> (o <em>hardware acceleration</em>) tramite l&#8217;istruzione &#8216;t<em>ransform: translate3d(0,0,0)</em>&#8216;, corredata con i vari <em>prefix</em> per la compatibilità browser, che renderà la nostra HTML5 Mobile App più fluida e performante.</p>
<p>Così facendo, ci assicuriamo delle animazioni fluide e performanti, nel momento in cui all&#8217;elemento &#8216;<em>section.article-wrapper</em>&#8216; vengono aggiunte le classi che le &#8216;innescano': &#8216;.<em>show-article</em>&#8216; e &#8216;.<em>hide-article</em>&#8216;.<em></em></p>
<p>Ecco il codice necessario per realizzare l&#8217;effetto di entrata:</p><pre class="crayon-plain-tag">section.article-wrapper {

  /*stili per il posizionamento*/
  position: fixed;
  left: 0;
  top: 0;      
  right: 0;    
  bottom:0;  
  z-index: 30;

  visibility: hidden;

  /* migliora le prestazioni prevenendo il render della parte 'posteriore' dell'elemento */
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
   backface-visibility: hidden;

   /* 
   	forziamo l'utilizzo della tecnica dell'accelerazione hardware per avere aniamzioni più fluide e reattive;
   	mpostando come elemento scatenante per l'effetto la proprietà 'translate3d'
   	il processo di rendering per l'elemento sarà delegato alla GPU (memoria grafica) 
   	prima, dopo e durante l'animazione
   */
   -webkit-transform: translate3d(0,0,0);
   -moz-transform: translate3d(0,0,0);
   -ms-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);               
}    

section.article-wrapper.show-article{

	/*
	nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'show-article'
	innescchiamo l'animazione di entrata specifcandola in corrispondenza dell'attributo 'animation'
	*/

    -webkit-animation: showFromBottom .25s ease both;
    -moz-animation: showFromBottom .25s ease both;
    animation: showFromBottom .25s ease both;

    visibility: visible;
}

section.article-wrapper.hide-article{
    /*
      nel momento in cui all'elemento 'section.article-wrapper' viene aggiunta la classe 'hide-article'
      inneschiamo l'animazione di uscita specificandola in corrispondenza dell'attributo 'animation'
    */
    -webkit-animation: hideToBottom .25s ease both;
    -moz-animation: hideToBottom .25s ease both;
    animation: hideToBottom .25s ease both;
}

/* definizione delle animazioni di entrata e di uscita per la view dell'articolo: muoviamo sempliemente l'elemento in verticale sull'asse delle ordinate */

/*animazione di entrata*/
@-webkit-keyframes showFromBottom {
    from { -webkit-transform: translateY(100%); }
}
@-moz-keyframes showFromBottom {
    from { -moz-transform: translateY(100%); }
}
@keyframes showFromBottom {
    from { transform: translateY(100%); }
}

/*animazione di uscita*/
@-webkit-keyframes hideToBottom {
    to { -webkit-transform: translateY(100%); }
}
@-moz-keyframes hideToBottom {
    to { -moz-transform: translateY(100%); }
}
@keyframes hideToBottom {
    to { transform: translateY(100%); }
}</pre><p>
&nbsp;</p>
<h2>Ultimo step: avviamo la nostra HTML5 Mobile App!</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/03/start-HTML5-Mobile-App.jpg"><img class="size-full wp-image-3442 aligncenter" alt="start-HTML5-Mobile-App" src="http://www.upcreative.net/wp-content/uploads/2014/03/start-HTML5-Mobile-App.jpg" width="690" height="400" /></a></p>
<p>Ora che  abbiamo tutti i pezzi del puzzle possiamo procedere ed avviare la nostra applicazione: per instanziare i nostri componenti ed avviare l’applicazione, torniamo sul file &#8216;<em>demo.js</em>&#8216; e ci serviremo del seguente codice javascript per inserire nella <em>collection</em> qualche articolo predefinito, con tanto di titolo, immagine, corpo dell&#8217;articolo e data, in modo da visualizzarli subito nella lista iniziale:</p><pre class="crayon-plain-tag">$(function(){

	//creiamo una nuova istanza per la collection degli articoli con 4 models iniziali
    var articles = new ArticleList([
        {
            title: "App su upCreative.net",
            image: "1.jpg",
            article: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
        },
        {
            title: "Secondo articolo su upCreative.net",
            image: "2.jpg",
            article: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur"
        },
        {
            title: "Articolo senza immagine 3",
            article: "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        },
        {
            title: "Quarto articolo sulla  lista",
            image: "3.jpg",
            article: "Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat"
        }
    ]);
    //creiamo una nuova istanza per la view dell'applicazione 
    //principale associandogli la collection
    var app = new AppView({
        collection : articles
    });

});</pre><p>
BOOM! L&#8217;esperimento è pronto, di seguito puoi consultare la demo o poterti divertire direttamente con i sorgenti.
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni, demo e download</h2>
<hr />
<p><em>Come creare una #HTML5 #MobileApp con #Backbonejs ed il pattern #MVC</em><br /><a href='https://twitter.com/share?text=Come+creare+una+%23HTML5+%23MobileApp+con+%23Backbonejs+ed+il+pattern+%23MVC&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Tramite questa demo è possible intuire, almeno in parte, le potenzialità che backbone ed il pattern MVC mettono a disposizione. Come avrai potuto notare ogni <em>view</em> agisce in modo &#8220;<strong>non intrusivo</strong>&#8221; nei confronti degli altri elementi: ognuna di esse &#8220;resta in ascolto&#8221; ad eventuali modifiche apportate al <em>model</em> o alla <em>collection</em> associati, attraverso l&#8217;istruzione &#8216;<em>this.listenTo</em>&#8216;.</p>
<p>Quando ciò accade, è possibile effettuare le relative modifiche al DOM della <em>view</em> senza doverle richiamare da parti esterne dell&#8217;applicazione ma agendo del tutto <strong>autonomamente</strong>. Di conseguenza l&#8217;applicazione stessa risulta maggiormente <strong>scalabile</strong> ed <strong>estendibile</strong> secondo le proprie esigenze.</p>
<p>E tu cosa ne pensi? Hai mai utilizzato Backbone per i tuoi progetti? Fammelo sapere lasciando un commento!
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			Aiutami a condividere la risorsa per ottenere la <strong>demo</strong> ed il <strong>download</strong>:</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab26116ea9e5-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab26116ea9e5-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare una HTML5 Mobile App con Backbone.js</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</title>
		<link>https://www.upcreative.net/mobile-slide-menu-css3/</link>
		<comments>https://www.upcreative.net/mobile-slide-menu-css3/#comments</comments>
		<pubDate>Wed, 22 Jan 2014 09:30:01 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[mobile slide menu]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3086</guid>
		<description><![CDATA[<p>Un altro tutorial sulla creazione di HTML Mobile App per la realizzazione di un mobile slide menu animato utilizzando CSS3 e con effetto ease elastico.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/mobile-slide-menu-css3/">Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Oggi riprendiamo il discorso delle <a title="Scrivere animazioni CSS3 tenendo in considerazione le performance" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/"><strong>performance</strong></a> per quanto riguarda le interfacce nei <strong>dispositivi mobile</strong>, che per caratteristiche hardware sono meno potenti di quelli desktop e riescono a supportare i <strong>processi di rendering</strong> in maniera molto più difficoltosa.</p>
<p>La strada scelta per realizzare un&#8217;<strong>animazione CSS3</strong> influenza notevolmente la fluidità e la reattività con cui un dispositivo mobile riesce a metterla in atto, e scrivere gli stili in modo corretto permette di creare <strong>Applicazioni Mobile in HTML5 e Javascript che non hanno nulla da invidiare a quelle native</strong>.</p>
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<p><em>A tal proposito ti consiglio di leggere:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le prestazioni</a></em></li>
<li><em><a title="Web e Mobile App fluide con Hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile App fluide con Hardware acceleration</a></em></li>
</ul>
<h2>Il tutorial di oggi: HTML Mobile Slide Menu</h2>
<p>In questo tutorial ti voglio mostrare come creare un <strong>Mobile Slide Menu</strong> con effetto <em>ease</em> e con voci di navigazione animate, utilizzando stili CSS3 performanti e gestendo gli eventi tramite Javascript. Ogni voce di menu sarà animata con un leggero ritardo rispetto a quella precedente, in modo da creare un effetto più accattivante.</p>
<p>L&#8217;esperimento potrebbe essere benissimo integrato in una <strong>HTML5 Mobile App </strong>da utilizzare come versione mobile di un sito web o da distribuire nei vari store, compilandola tramite tools come <a title="Phonegap - Creare applicazioni utilizzando HTML, CSS, e JavaScript" href="http://phonegap.com">Phonegap</a>.</p>

		</div> 
	</div> </div></div>
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-slide-menu-css3.jpg" class="attachment-full" alt="mobile-slide-menu-css3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/21012014-Mobile-slide-menu-CSS3/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3094/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Premessa</h2>
<p>Il risultato è ottimizzato per dispositivi mobile e le tecniche utilizzate (come l&#8217;<strong><a title="Accelerazione Hardware" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">accelerazione hardware</a> </strong>e la composizione dei<strong> livelli grafici</strong>)  sono suppurate solo dai browser di ultima generazione. Pertanto, se vuoi integrare il menu in un sito web, è opportuno attuare un&#8217;adeguata tecnica di <b>Progressive Enhancement.</b></p>
<p><em>Per approfondire il discorso del Progressive Enhancement e per vedere come realizzare uno slide menu ottimizzato su tutti i browser, ti consiglio di leggere questo post:</em></p>
<ul>
<li><em><a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">CSS3 slide panel: tutorial su come realizzare un menu stile mobile</a></em></li>
</ul>
<h2>Il markup HTML</h2>
<p>Come primo passo impostiamo il markup HTML del documento, il quale prevede principalmente due elementi essenziali: il <strong>contenitore del menu</strong> (con al suo interno una lista di 4 voci) e quello dei <strong>contenuti</strong> dell&#8217;applicazione, rispettivamente rappresentati da un elemento <em>&lt;nav&gt; </em> con classe <em>&#8216;menu&#8217;</em>, e da un <em>&lt;div&gt; </em>con classe <em>&#8216;content-wrapper&#8217;.</em></p><pre class="crayon-plain-tag">&lt;nav class="menu"&gt;
    &lt;ul&gt;	    
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-search fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Ricerca&lt;/span&gt;
	    	&lt;/a&gt;
    	&lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-star fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Preferiti&lt;/span&gt;
	    	&lt;/a&gt;
	    &lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-users fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Amici&lt;/span&gt;
	    	&lt;/a&gt;
	    &lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-cog fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Impostazioni&lt;/span&gt;
	    	&lt;/a&gt;
    	&lt;/li&gt;	    
    &lt;/ul&gt;

&lt;/nav&gt;

&lt;!-- contenuto dell'applicazione --&gt;

&lt;div class="content-wrapper"&gt;

	&lt;section class="page"&gt; &lt;!-- pagina (o view dell'applicazione) --&gt;

		&lt;header&gt; &lt;!-- header della pagina --&gt;
			&lt;button class="toggle-menu"&gt;&lt;i class="fa fa-bars fa-lg"&gt;&lt;/i&gt;&lt;/button&gt;
			&lt;h1 class="title"&gt;HTML Mobile App&lt;/h1&gt;

		&lt;/header&gt;
		&lt;article class="text-center"&gt;

			Conenuto pagina	

		&lt;/article&gt;
	&lt;/section&gt;

&lt;/div&gt;</pre><p>
Per realizzare il nostro HTML Mobile Slide Menu facciamo in modo di <strong>posizionare entrambi gli elementi DOM (&#8216;<em>.menu</em>&#8216; e &#8216;.<em>content-wrapper</em>&#8216;) tramite la proprietà <em>position:absolute</em></strong>, per sovrapporre il contenitore dell&#8217;applicazione al menu.</p>
<p>Poi, avviando l&#8217;effetto <em>slide</em>, il contenitore sarà traslato orizzontalmente dello stesso numero di pixel che compongono la larghezza del menu (260px).</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/elementi-mobile-slide-menu.jpg"><img class="size-full wp-image-3101 aligncenter" alt="elementi-mobile-slide-menu" src="http://www.upcreative.net/wp-content/uploads/2014/01/elementi-mobile-slide-menu.jpg" width="586" height="460" /></a></p>
<p>Andiamo quindi a vedere il codice CSS3 necessario per raggiungere tale obiettivo.</p>
<h2>Gli stili CSS3</h2>
<p>Innanzitutto posizioniamo i due elementi, attribuendo al contenitore uno <em>z-index </em>superiore a quello del menu:</p><pre class="crayon-plain-tag">nav.menu {
    position: absolute;
    left: 0;
    width: 260px;
    height: 100%;
    top: 0;
    z-index: 1;	    
    background: #B8BDC5;
}
.content-wrapper{
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    z-index: 2;
    background-color: #4A5A6E;	    
}
/*
	ecco gli stili per il posizionamento di un'ipotetica pagina (o view)	
	che si trova all'internod el contenitore su cui effettueremo l'effeto slide	
*/
.content-wrapper &gt; section.page{
	position: absolute;
	top:0;
	left:0;
	width: 100%;
	height: 100%;
}</pre><p>
Attiviamo l&#8217;effetto<em> slide-right, </em>utile per rivelare il menu, impostando il foglio di stile in modo che basti aggiungere una classe all&#8217;elemento DOM:</p><pre class="crayon-plain-tag">.content-wrapper {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    z-index: 2;
    background-color: #4A5A6E;

    /*
	impostiamo l'effetto di transizione sul contenitore della pagina/delle pagine del documento	    
	in modo da forzare la creazione dei layer grafici (accelerazione hardware)
	e rendere l'animazione più performante;
	il tutto riportando tutti i prefix per la compatibilità browser
    */

    -webkit-transition: -webkit-transform .5s ease-in-out;
    	  -moz-transition: -moz-transform .5s ease-in-out;
    	    -ms-transition: -ms-transform .5s ease-in-out;
    	      -o-transition: -o-transform .5s ease-in-out;
    	            transition: transform .5s ease-in-out;

}			

.content-wrapper.open-left {

	/*
		nel caso in cui venga aggiunta la classe 'open-left'
		avviamo l'effetto transition modificando la prop. transform
		e traslando in senso positivo tutto il contenuto di 260px,
		al fine di rivelare il menu nascosto sotto
	*/

    -webkit-transform: translate3d(260px, 0, 0);
       -moz-transform: translate3d(260px, 0, 0);
        -ms-transform: translate3d(260px, 0, 0);
         -o-transform: translate3d(260px, 0, 0);
            transform: translate3d(260px, 0, 0);

}</pre><p>
Agendo sulla proprietà di stile <em>transition, </em>richiamiamo, tramite il <em>transform</em>, un tipo di effetto che forza l&#8217;accelerazione hardware e quindi la composizione dei livelli grafici (il cui rendering è delegato alla GPU), <strong>alleggerendo così i carichi di lavoro</strong> e<strong> favorendo la fluidità dell&#8217;animazione.</strong></p>
<p>Facciamo quindi la stessa cosa per gli elementi della lista del menu, che devono essere traslati anch&#8217;essi orizzontalmente e mostrati con una leggera dissolvenza:</p><pre class="crayon-plain-tag">nav.menu ul li{
	display: block;
	margin-bottom: 10px;  

	opacity: 0.8;  	 	

    -webkit-transform: translate3d(-260px, 0, 0);
       -moz-transform: translate3d(-260px, 0, 0);
        -ms-transform: translate3d(-260px, 0, 0);
         -o-transform: translate3d(-260px, 0, 0);
            transform: translate3d(-260px, 0, 0);

}

/* 
facciamo in modo che le &lt;li&gt; della navigazione siano animate solo nel caso 
in cui  l'elemento '.menu' abbia la classe 'animate li';
questo ci permette di animare ogni &lt;li&gt; solo quando il menu viene mostrato e 
non quando viene chiuso
*/

nav.menu.animate-li ul li{
    -webkit-transition: all .5s ease-in-out;
       -moz-transition: all .5s ease-in-out;
    	-ms-transition: all .5s ease-in-out;
    	 -o-transition: all .5s ease-in-out;
    	    transition: all .5s ease-in-out;
}</pre><p>
Dal codice puoi vedere che l&#8217;effetto <em>transition</em> viene attivato solo nel caso in cui all&#8217;elemento<em> &lt;nav&gt;</em> del menu venga aggiunta la classe &#8216;<em>animate-li</em>&#8216;; questo è per <strong>animare gli elementi della lista solo nel caso in cui il menu venga aperto</strong>, e non durante l&#8217;azione di chiusura.</p>
<p>Per rendere l&#8217;effetto più accattivante aggiungiamo a tutti gli elementi della lista (tranne il primo) un leggero ritardo rispetto a quello precedente tramite la proprietà <strong><em>transition-delay</em></strong>:</p><pre class="crayon-plain-tag">/* impostiamo i ritardi di animazione per gli elementi della lista */

nav.menu ul li:nth-child(2){
	-webkit-transition-delay: .05s;
		transition-delay: .05s;
}

nav.menu ul li:nth-child(3){
	-webkit-transition-delay: .08s;
		transition-delay: .08s;
}

nav.menu ul li:nth-child(4){
	-webkit-transition-delay: .11s;
		transition-delay: .11s;
}</pre><p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/transition-delay-mobile-slide-menu.jpg"><img class="size-full wp-image-3102 aligncenter" alt="transition-delay-mobile-slide-menu" src="http://www.upcreative.net/wp-content/uploads/2014/01/transition-delay-mobile-slide-menu.jpg" width="690" height="460" /></a></p>
<p>Impostiamo quindi la classe da giungere al menu per attivare l&#8217;animazione sulle 4 voci:</p><pre class="crayon-plain-tag">/* attiviamo l'animazione della transition agendo sulle proprietà 'scatenanti' */

nav.menu.open-left ul li{

    opacity: 1;

    -webkit-transform: translate3d(0, 0, 0);
       -moz-transform: translate3d(0, 0, 0);
        -ms-transform: translate3d(0, 0, 0);
         -o-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
}</pre><p>
Infine, per inclinare graficamente ogni voce di menu, ci serviamo anche qui della proprietà <em>tansform</em><em>, </em>tramite la funzionalità <strong><em>skew</em></strong> attivata agendo sull&#8217;asse delle Y:</p><pre class="crayon-plain-tag">nav.menu ul a &gt; span{
	display: block;
	width:100%;
	height: 60px;
	background: #000;
	font-size: 20px;
	z-index: 1;
	text-transform: uppercase;
	font-weight: 400;

	padding:15px 10px 15px 75px;

	-moz-box-sizing: border-box;
		 box-sizing: border-box;

    /* 
    utilizziamo la proprietà 'skew' per effettuare un'inclinazione 
    verticale per lo span (agendo sull'asse delle Y), usando come origine 
    l'angolo in basso a sinistra per fare in modo che l'icona rimanga nella
    sua posizione rispetto allo span
    */

    -webkit-transform-origin: 0 100%;
       -moz-transform-origin: 0 100%;
        -ms-transform-origin: 0 100%;
         -o-transform-origin: 0 100%;
            transform-origin: 0 100%;

    -webkit-transform: skew(0,-10deg);
       -moz-transform: skew(0,-10deg);
        -ms-transform: skew(0,-10deg);
         -o-transform: skew(0,-10deg);
            transform: skew(0,-10deg);

}</pre><p>
Poiché l&#8217;obiettivo era quello di inclinare tutta la voce ma non l&#8217;icona, ci siamo serviti di uno <em>&lt;span&gt;</em> posto all&#8217;interno del link a cui abbiamo attribuito uno sfondo nero e all&#8217;interno del quale abbiamo inserito il testo della rispettiva voce.</p>
<p>Questa tecnica ci ha permesso inoltre di applicare due trasformazioni diverse ad ogni voce di menu, in quanto non sarebbe stato possibile traslare ed inclinare contemporaneamente l&#8217;elemento <em>&lt;li&gt; </em>(la possibilità di <strong>impostare una sola trasformazione alla volta per ogni elemento è purtroppo una limitazione delle animazioni CSS3</strong>).</p>
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Il codice Javascript</h2>
<p>Andiamo a gestire ora l&#8217;evento di click sul pulsante di apertura per aprire o chiudere il nostro Mobile Slide Menu:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine transizione, che cambia a seconda del browser */

var endTransitionName = {
	'WebkitTransition' : 'webkitTransitionEnd',
	'OTransition' : 'oTransitionEnd',
	'msTransition' : 'MSTransitionEnd',
	'transition' : 'transitionend'
};
var transitionEventName = endTransitionName[ Modernizr.prefixed( 'transition' ) ];

$(function(){

	var menuNav = $("nav.menu");	
	$(".toggle-menu").on("click", function(){	

    	if(!menuNav.hasClass("open-left")){

    		/*
	    		se il menu di navigazione non ha la classe 'open-left' e quindi è chiuso, 
	    		come prima cosa aggiungiamo la classe 'animate-li', che aggiunge le impostazioni per l'effetto di transizione,  
	    		e poi la stessa 'open-left'; facciamo quindi lo stesso con il contenitore della pagina (classe 'content-wrapper')
    		*/

    		menuNav.addClass("animate-li");
	    	$("nav.menu, .content-wrapper").addClass("open-left");
    	}else{

    		/*
    			se il menu di navigazione è 'aperto', quindi presenta la classe 'open-left',
	    		come prima cosa rimuoviamo la classe 'animate-li' in modo da non scatenare l'animazione
	    		sulle &lt;li&gt; per la chiusura
	    		Poi rimuoviamo la classe 'open-left' SOLO al contentenitore, in modo da scatenare l'aniamzione di chiusura.
	    		AL termine di quest'ultima rimuoveremo la classe anche dal menu per ripristinare la posizione di partenza di ogni &lt;li&gt;
    		*/

	    	menuNav.removeClass("animate-li");
	    	$(".content-wrapper").removeClass("open-left").one(transitionEventName, function(){
		    	menuNav.removeClass("open-left");
	    	});
    	}		    	
	});

});</pre><p>
Nel momento in cui il pulsante viene cliccato controlliamo se il menu è aperto o chiuso verificando la presenza o meno della classe &#8216;<em>open-left</em>&#8216; sull&#8217;elemento <em>&lt;nav&gt;</em>.</p>
<p><strong>Se è chiuso</strong>, prima attiviamo gli effetti per le voci di menu aggiungendo la classe &#8216;<em>animate-li</em>&#8216; al contenitore del menu, poi avviamo le animazioni sia su di esso che sul contenitore delle pagine, aggiungendo ai relativi elementi la classe &#8216;<em>open-left</em>&#8216;.</p>
<p><strong>Se invece il menu è visible</strong>, rimuoviamo la classe &#8216;<em>animate-li</em>&#8216; dall&#8217;elemento <em>&lt;nav&gt;</em> per non scatenare l&#8217;animazione contraria sulle 4 voci, poi rimuoviamo la classe &#8216;<em>open-left</em>&#8216; dal contenitore in modo avviare l&#8217;effetto <em>slide</em> di chiusura, ed infine, una volta terminato quest&#8217;ultimo, riportiamo le voci di menu allo stato iniziale rimuovendo anche dall&#8217;elemento <em>&lt;nav&gt;</em> la classe &#8216;<em>open-left&#8217;</em>.</p>
<p><em>Per vedere come gestire gli eventi di fine transizione e animazione con <a title="Modenizr - Liberia per la compatibilità dei browser" href="http://modernizr.com">Modernizr</a>, ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a></em></li>
</ul>
<p>&nbsp;</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-slide-menu-css3.jpg" class="attachment-full" alt="mobile-slide-menu-css3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/21012014-Mobile-slide-menu-CSS3/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3094/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Dalla demo puoi vedere come il risultato dell&#8217;esperimento sia un&#8217;animazione fluida e performante, priva di quei sfarfalli e crash che spesso caratterizzano le applicazioni HTML realizzate con framework come jQuery Mobile o jQtouch.</p>
<p>Due piccole note su questo tutorial:</p>
<ol>
<li>nel codice sopra riportato sono stati aggiunti i prefissi su proprietà come <em>transition</em> e <em>transform</em> per la compatibilità browser; tuttavia sviluppando solo per mobile sarebbe possibile omettere tutti i prefissi tranne quello per browser webkit-based (<em>-webkit-)</em></li>
<li>per avere un risultato ed una <em>user-experience </em>migliore sarebbe opportuno aggiungere il <strong>supporto per il touch</strong>, in modo da mostrare il menu durante l&#8217;azione di <em>swipe</em> dell&#8217;utente.</li>
</ol>
<p>E tu? Hai mai realizzato delle applicazioni Mobile in HTML4, CSS3 e Javascript? Lascia un commento qui di seguito e fammi sapere le tue opinioni a riguardo!</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong></p>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/mobile-slide-menu-css3/">Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/mobile-slide-menu-css3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
