 
 
 <?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 login</title>
	<atom:link href="https://www.upcreative.net/tag/mobile-login/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>Come creare un app: realizzare una view di login con il localStorage</title>
		<link>https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/</link>
		<comments>https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/#comments</comments>
		<pubDate>Thu, 29 May 2014 09:53:26 +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[come creare un app]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[mobile login]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3994</guid>
		<description><![CDATA[<p>Ecco un altro tutorial in cui ti mostro come creare un app mobile in HTML5, CSS3 e Javascript con Backbone.js. Nell'esperimento visualizzeremo una view di login oppure il contenuto dell'applicazione, controllando, tramite dei dati salvati lato-client su localStorage, se l'utente ha già effettuato il login o meno.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/">Come creare un app: realizzare una view di login con il localStorage</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">
			In questa mini-guida divisa in due parti, ti ho mostrato <a title="Come gestire i dati di un'applicazione mobile o di una web app sfruttando il Web SQL" href="http://www.upcreative.net/come-creare-un-app-in-html-salvataggio-dati-con-database-sql-lato-client-parte-1/">come gestire i dati di un&#8217;applicazione mobile o di una web app sfruttando il Web SQL</a>, un tipo di database che permette di salvare record in locale sul dispositivo utilizzato dall&#8217;utente, tramite istruzioni SQL, linguaggio ben conosciuto dalla maggior parte dei web designers.</p>
<p>I metodi di salvataggio <em>lato-client</em> sono molto utili nel caso di applicazioni mobile sviluppate in HTML5, CSS3 e Javascript, ed è per questo che oggi voglio condividere con te un tutorial incentrato su un&#8217;altro sistema di salvataggio dati <em>lato-client</em>, il <strong>localStorage.</strong></p>
<p>L&#8217;idea di scrivere questo post nasce dalla domanda di uno dei lettori di upCreative.net (a proposito, ringrazio <a href="https://twitter.com/sixdas">sixdas</a> per lo spunto) su come poter creare l&#8217;interfaccia di un&#8217;applicazione mobile che mostri all&#8217;utente una schermata di login oppure il contenuto dell&#8217;app, a seconda se è stato effettuato o meno il login con username e password.</p>
<p>Alle <strong>fine dell&#8217;articolo</strong> potrai trovare il <strong>link per il download dei file sorgenti</strong>.</p>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Tutorial su come creare un app: l&#8217;obiettivo finale</h2>
<p>In altre parole, all&#8217;avvio dell&#8217;applicazione controlleremo se nel <em>localStorage</em> è stata salvata una variabile che identifica l&#8217;username dell&#8217;utente: se è presente lo rimanderemo ai contenuti dell&#8217;applicazione, altrimenti visualizzeremo la schermata attraverso la quale egli potrà inserire i propri dati, che useremo poi per impostare la variabile di controllo nel <em>localStorage</em>.</p>
<p><img class="aligncenter wp-image-4015 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/html-mobile-app-login.png" alt="html-mobile-app-login" width="690" height="600" /></p>
<p>Come <em>view</em> interna dell&#8217;app, quella accessibile solamente una volta effettuato il login, useremo la stessa del tutorial &#8220;<a title="Semplice Mobile App con Bootstrap Ratchet e Backbone.js" href="http://www.upcreative.net/smplice-html5-mobile-app-bootstrap-ratchet-backbone-js/"><strong>Semplice Mobile App con Bootstrap Ratchet e Backbone.js</strong></a>&#8221; che ti ho mostrato in precedenza, che sarà quindi utilizzato come &#8220;base&#8221; per questo esperimento (in sostanza, quello che faremo è aggiungere la parte di login).</p>
<p>Il <em>localStorage</em>, di cui avevo parlato <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/">in questo articolo che ho scritto</a> per YourInspirationWeb.com, è un <strong>sistema di salvataggio dati non-relazionale</strong>, che analogamente all&#8217;<em>indexedDB</em>, si basa sul concetto di coppia chiave-valore, per cui in corrispondenza di ogni chiave possiamo salvare qualsiasi tipo di variabile javascript: una stringa, un numero, un oggetto JSON e così via.</p>
<p>Noi lo utilizzeremo semplicemente per salvare l&#8217;<em>username</em> dell&#8217;utente in corrispondenza della chiave &#8220;<i>user</i>&#8220;, in modo da poter ricontrollare quella variabile ogni volta che l&#8217;applicazione viene avviata, ovvero ogni volta che il documento della pagina <em>index.html </em>viene ricaricato.</p>
<h2>La view del login</h2>
<p>L&#8217;esperimento precedente, basato su <em><a href="http://backbonejs.org/">Backbone.js</a>, </em>era strutturato in questo modo:</p>
<p><img class="aligncenter wp-image-3494 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/03/composizione-backbone-views.jpg" alt="composizione-backbone-views" width="690" height="400" /></p>
<p>Quello che dobbiamo fare è aggiungere la <em>view</em> di login, esattamente allo stesso livello DOM della <em>view</em> principale mostrata nell&#8217;immagine con il colore azzurro, ed effettuare il <em>.render() </em>di una o dell&#8217;altra, a seconda del contenuto della variabile del <em>locaStorage</em>.</p>
<p><img class="aligncenter wp-image-4016 size-full" src="http://www.upcreative.net/wp-content/uploads/2014/05/html-mobile-login-view.jpg" alt="html-mobile-login-view" width="690" height="400" /></p>
<p>Come prima cosa definiamo <strong>l&#8217;oggetto <em>Backbone.View</em></strong> all&#8217;interno del file <em>demo.js, </em>il file javascript <em>demo.js,</em> in cui sono già presenti tutte le altre <em>view</em>:</p><pre class="crayon-plain-tag">//view per il login che viene mostrata solo quando l'utente non è loggato
var LoginView = 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 login-wrapper",

    //impostaiamo l'id del template da cui generare il markup di questa view
    template: "#loginview-template",

    initialize: function() {

        //compiliamo il template in una variabile
        this.template = _.template($(this.template).html());

        this.AnimEndEventName = this.getAnimEndEventName();
    },

    //funzione che genera il markup di questa view
    render: function () {
        this.$el.html(this.template()); 
        return this;
    },

    /* Grazie a modernizr riprendo il nome dell'evento di fine animazione, che cambia a seconda del browser */

    getAnimEndEventName: function(){

        var animEndEventNames = {
            'WebkitAnimation' : 'webkitAnimationEnd',
            'OAnimation' : 'oAnimationEnd',
            'msAnimation' : 'MSAnimationEnd',
            'animation' : 'animationend'
        };

        return animEndEventNames[ Modernizr.prefixed( 'animation' ) ];
    },

    // Deleghiamo gli eventi per la ricerca sull'input di testo 
    events: {
        //evento //selettore    //funzione da eseguire
        "submit  form":    "login"
    },

    //funzione che gestosce il login del form
    login: function (e) {

        e.preventDefault();
        var _this = this,
            form = $(e.currentTarget); 
            username = $.trim(form.find("[name=username]").val()),  
            password = $.trim(form.find("[name=password]").val()),
            submitBtn = form.find("button");

        //controllo sulla lunghezza di username e password
        if(username.length==0 || password.length==0){
            alert("Username e password sono obbligatori");
            return;
        }

        //qui andrebbe il controllo username e password (magaro tramite SQLite, Web SQL o su Ajax mediante database)
        //ma per questo esperimento simuliamo la cosa con un setTimeout di 2 secondi

        submitBtn.text("Login in corso...");
        setTimeout(function(){
            submitBtn.text("Login");

            //una volta verificate le credenziali di login salvo l'utente in modo persistente sul dispositivo tramite localStorage
            localStorage.setItem("user", username);
             //richiamo la funzione che inizializza i dati degli articoli e mostra la view della lista
            showList();
            //nasondo la view di login in modo da mostrare quella degli articoli
            _this.hide();

        }, 2000);      

    },

    show: function(callback){

        var _this = this;

        //aggiungendo la classe 'opened' al contenitore di questa view 
        //(elemento 'section.login-wrapper') innesco l'animazione di entrata
        this.$el.addClass("opened");

        //se è stata passata una funzione di callback, la richiamo una volta terminato l'evento di fine animazione
        if(callback){
            _this.$el.one( this.AnimEndEventName, function(){
                callback();
            });  
        }

    },

    hide: function(callback){

        var _this = this;
        //aggiungendo la classe 'hidden' al contenitore di questa view 
        //(elemento 'section.login-wrapper') inneschiamo l'animazione di uscita
        _this.$el.addClass("hidden");        
        //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( this.AnimEndEventName, function(){
            _this.remove();
            //se è stata passata una funzione di callback, la richiamo una volta terminato l'evento di fine animazione
            if(callback)
                callback();

        });   
    }

});</pre><p>
Nel momento in cui si verifica l&#8217;evento <em>submit</em> del <em>form </em>di login, viene richiamato il metodo &#8220;<em>login</em>&#8220;, all&#8217;interno del quale, dopo aver verificato che username e password siano stati inseriti, simuliamo una richiesta al server con un <em>setTimeout </em> di 2 secondi, durante il quale cambiamo il testo del pulsante di login.</p>
<p>Al termine dei due secondi salviamo in corrispondenza della chiave &#8220;<em>user</em>&#8221; del <em>localStorage </em>l&#8217;username fornito dall&#8217;utente, mediante <strong>il metodo &#8220;.setItem()&#8221; </strong>e richiamiamo la funzione<strong> &#8220;<em>showList&#8221;, </em></strong>che inizializzerà e mostrerà all&#8217;utente la <em>view</em> principale, quella che contiene la lista degli articoli (<em>StartView</em>)<strong><em> </em>.</strong></p>
<p>Come la <em>view</em> principale, anche quella di login utilizza come contenitore il tag <em>&lt;section&gt; </em>con con la classe &#8220;.<em>page-wrapper</em>&#8220;; in più è stata aggiunta la classe &#8220;<em>login-wrapper</em>&#8221; in modo da poter attribuire a questa view degli stili CSS aggiuntivi.</p>
<p>Grazie ad essi potremo infatti mostrare la <em>view</em> con un&#8217;animazione fluida e performante di tipo <em>slideIn</em> dal basso verso l&#8217;alto, che sfrutta la <strong>tecnica dell&#8217;accelerazione hardware.</strong></p>
<p><em>Se vuoi approfondire il discorso delle animazioni fluide e perfomanti, e quello della tecnica dell&#8217;accelerazione hardware, forse potrebbe interessarti il seguente articolo:</em></p>
<ul>
<li><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/"><em>Web e Mobile App fluide con hardware acceleration</em></a></li>
</ul>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Inoltre sono da sottolineare i due metodi &#8220;<em>show</em>&#8221; e &#8220;<em>hide</em>&#8220;, i quali aggiungono all&#8217;elemento contenitore della <em>view</em> (l&#8217;elemento DOM &#8220;<em>section.login-wrapper&#8221;</em>) le classi &#8220;<em>opened</em>&#8221; ed &#8220;<i>hidden</i>&#8220;, che scateno le animazioni CSS di entrata e di uscita.</p>
<p>Grazie a Modernizr, incluso nel documento all&#8217;interno del file <em>index.html (</em>nel tag<em> &lt;head&gt;)</em>, riusciamo ad &#8220;agganciare&#8221; all&#8217;evento di fine animazione (il cui nome cambia a seconda del browser utilizzato dall&#8217;utente) una funzione nel momento in cui l&#8217;animazione definita nei CSS giunge al termine (vedi <a href="http://www.yourinspirationweb.com/2014/01/24/html5-mobile-app-transizioni-e-animazioni-css3-parte-2/">questo articolo</a> per avere maggiori informazioni).</p>
<h3>Gli stili CSS</h3>
<p>Vediamo gli stili CSS3 utilizzati per definire la dinamica dell&#8217;animazione di entrata e di uscita della schermata di login:</p><pre class="crayon-plain-tag">/* codice CSS3 performante per l'animazione della view di login */

section.login-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.login-wrapper.opened{

	/*
	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.login-wrapper.hidden{
    /*
      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>
La dinamica e le caratteristiche delle animazioni sono state riprese da uno dei miei precedenti tuorial sull&#8217;argomento. Per avere maggiori informazioni visita il relativo link:</p>
<ul>
<li><a title="Come creare un HTML5 Mobile App con Backbone.js" href="http://www.upcreative.net/come-creare-una-html5-mobile-app-con-backbone-js/">Come creare un HTML5 Mobile App con Backbone.js</a></li>
</ul>
<h3>Il template</h3>
<p>Come prima cosa aggiungiamo il template della view all&#8217;interno del tag <em>&lt;body&gt;</em> file <em>index.html, </em>dove sono già presenti quelli della view principale, delle view della lista e della view dell&#8217;articolo singolo:</p><pre class="crayon-plain-tag">&lt;!-- template per la view del login  (LoginView su demo.js) --&gt;
	&lt;script type="text/template" id="loginview-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="content"&gt;
			&lt;h3&gt;Effettua il login&lt;/h3&gt;
			&lt;form&gt;
			  &lt;input type="text" name="username" placeholder="Username"&gt;
			  &lt;input type="password" name="password" placeholder="Password"&gt;
			  &lt;button class="btn btn-primary btn-block"&gt;Login&lt;/button&gt;
			&lt;/form&gt;
		&lt;/div&gt;

	&lt;/script&gt;</pre><p>
Anche questa <em>view</em>, come le altre, è stata realizzata in modo tale che sfrutti gli stili di <a href="http://goratchet.com/">Ratchet 2</a>, un set di CSS pronti da utilizzare come base per la realizzazione di una mobile app.</p>
<p>Al suo interno abbiamo inserito un semplice <em>form</em> di login con 2 campi per username e password.</p>
<h2>Come creare un app: il controllo del login</h2>
<p>Nell&#8217;esperimento precedente, dove il login non era presente, ci preoccupavamo subito di inizializzare la <em>view</em> princiaple; in questo tutorial dobbiamo invece controllare il contenuto della variabile <em>localStorage</em> per la chiave &#8220;<em>user</em>&#8221; prima di decidere se mostrare all&#8217;utente la <em>view</em> di login piuttosto che quella della lista degli articoli.</p>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>Pertanto inseriamo l&#8217;inizializzazione della <em>view </em>di iniziale (<em>StartView</em>) all&#8217;interno di una funzione denominata &#8220;<em>showList</em>&#8220;, in modo da poterla richiamare inizialmente oppure dopo che l&#8217;utente ha effettuato correttamente l&#8217;operazione di login:</p><pre class="crayon-plain-tag">//per poter inizializzaere e mostrare la view della lista degli articoli in più parti dell'applicazione
//la inseriamo all'interno di una funzione globale

var showList = 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>
Una volta fatto ciò, non dovremo far altro che controllare la variabile &#8220;<em>user</em>&#8221; all&#8217;interno del <em>localStorage</em>, nel momento in cui l&#8217;applicazione viene lanciata:</p><pre class="crayon-plain-tag">$(function(){

    //riprendo il contenuto della variabile "user" del localStorage
    var user = window.localStorage.getItem("user");

    if(user){
        //se in localStorage è presente un oggetto in corrispondenza della chiave "user", 
        //allora significa che l'utente è già loggato, quindi mostriamo direttamente la view della lista degli articoli
        showList();
    }else{
        //se l'utente non è loggato (quindi il contenuto della variabile è vuoto), allora mostriamo la view di login
        var loginView = new LoginView();
        $("body").append(loginView.render().el);
        loginView.show();
    }

});</pre><p>
<h3>Come creare un app: il pulsante di logout</h3>
<p>Una volta predisposti la <em>view</em> di login ed il controllo della sessione tramite <em>localStaorage</em>, è buona norma aggiungere un pulsante per <strong>effettuare il logout</strong>, in modo da dare la possibilità all&#8217;utente di riaccedere con un username differente.</p>
<p>Inseriamo quindi nel template della <em>view</em> <em>&#8220;StartView&#8221;</em> un footer contenente il nuovo pulsante:</p><pre class="crayon-plain-tag">&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 class="info"&gt;
				&lt;h4&gt;Benvenuto/a "&lt;%=username%&gt;"&lt;/h4&gt;
				&lt;p&gt;Prova ad aggiornare la pagina, il login non verrà richiesto, a meno che non venga effettuato il logout. ;) &lt;/p&gt;
			&lt;/div&gt;
		&lt;/div&gt;

		&lt;!-- Footer con il pulsante di logout --&gt;
		&lt;div class="bar bar-standard bar-footer"&gt;
		  &lt;button class="btn btn-primary btn-block logout"&gt;Logout&lt;/button&gt;		 
		&lt;/div&gt;

	&lt;/script&gt;</pre><p>
Il click (o tap) su di esso sarà poi gestito all&#8217;interno della <em>view </em>di Backbone:</p><pre class="crayon-plain-tag">var StartView = Backbone.View.extend({

    ...

    // Deleghiamo gli eventi per la ricerca sull'input di testo 
    events: {
        ...
        "click    .logout":      "logout"  //gestione del pulsante di logout
    },

    ...

    logout: function(){

        var _this = this;

        //azzero la variabile del lovalStorage
        window.localStorage.removeItem("user");

        //mostro di unovo la view di login, per poi rimuovere questa view
        var loginView = new LoginView();
        $("body").append(loginView.render().el);
        loginView.show(function(){
            _this.remove();
        });

    }
});</pre><p>
Come puoi vedere dal codice, il compito del metodo  &#8220;<em>logout</em>&#8221; è quello di azzerare la variabile di controllo di login e mostrare la <em>view</em> &#8220;<em>LoginView</em>&#8220;, per poi rimuovere quella corrente al termine dell&#8217;animazione di entrata (passando al metodo &#8220;<em>show</em>&#8220;, definito nella <em>view </em>di login, una funzione di <em>callback</em>).</p>
<h2>Il risultato finale</h2>
<hr />
<p><em>Come creare la view di login in un #HTML5 #mobileapp con #backbonejs</em><br /><a href='https://twitter.com/share?text=Come+creare+la+view+di+login+in+un+%23HTML5+%23mobileapp+con+%23backbonejs&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/come-creare-un-app-realizzare-view-login-localstorage/' target='_blank'>Click To Tweet</a></p>
<hr />

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<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/28052014_HTML5-Mobile-App-login/"></iframe></div>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/28052014_HTML5-Mobile-App-login/" target="_blank"class="g-btn type_primary"><span>Apri DEMO in una nuova finestra</span></a></div>
<div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Download dei sorgenti</h2>
<h4>Aiutami a condividere la risorsa per ottenere il <strong>download</strong>:</h4>

		</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-shortcode6adc6f3e55949-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6adc6f3e55949-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-realizzare-view-login-localstorage/">Come creare un app: realizzare una view di login con il localStorage</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-realizzare-view-login-localstorage/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
