2012-07-15 24 views
7

Ho appena iniziato a studiare Phonegap + jQuery Mobile e HTML5 ,, quindi non perdere i nervi con la mia idiozia!Lettura e scrittura da localStorage?

Qualcuno potrebbe dirmi perché questo non funziona? Quando utilizzo una variabile da localStorage, ottengo uno schermo vuoto quando si preme il pulsante, ma quando si utilizza una temperatura variabile = "100", funziona correttamente. Android 4.1.

<script type="text/javascript" charset="utf-8"> 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    window.localStorage.setItem("temperature", "100"); 
    var temperature = window.localStorage.getItem("temperature"); 
} 
</script> 
<div data-role="content"> 
    <p>Working or not?</p> 
    <button onclick="myFunction()">Try it</button> 
    <p id="testi"></p> 
<script type="text/javascript"> 
    function myFunction() { 
    //var temperature = "100";----> This is working! 
    document.getElementById("testi").innerHTML = temperature; 
    } 
</script> 
</div> 

Un'altra domanda: come gestire le variabili tra le pagine in Windows Phone? Non supportano localStorage, quindi c'è un altro modo per gestirlo se non hai la connessione db?

Grazie!

Sami

+0

Non ho esperienza con phonegag o android, ma sono abbastanza sicuro che sia un problema di portata/chiusura. Stai definendo 'var temperature' all'interno della funzione' onDeviceReady', è solo definito all'interno di quell'ambito. Non è possibile utilizzarlo all'interno di 'myFunction' poiché tale variabile ha un ambito completamente diverso. Presenterei questa risposta come risposta, ma come mai nessuno ha risposto in 35 minuti? –

+0

U puoi semplicemente inviarlo come risposta! C'è un modo per rendere variabili "globali" in JavaScript, penso di sì. Devo capirlo. Molte grazie! – Sami

+0

Sì, Bryan ha appena fatto un esempio. Ne aggiungerò un po 'alla sua risposta e sono un po' stanco di dare una risposta "completa". ':' –

risposta

10

temperature è locale alla portata della funzione onDeviceReady. Cioè, una volta che la funzione è finita, non c'è più.

Sono disponibili due opzioni:

// Make it global 
var temperature; 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    window.localStorage.setItem("temperature", "100"); 
    temperature = window.localStorage.getItem("temperature"); 
} 

o:

// Retrieve it in myFunction 
function myFunction() { 
    var temperature = localStorage.getItem("temperature"); 
    document.getElementById("testi").innerHTML = temperature; 
} 

Per una buona lista di esempi di portata funzione, provare this answer.

+0

[Come funzionano le chiusure javascript?] (Http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) è anche un buon riferimento (anche se è un po 'più profondità per sotto-funzioni). –

+0

Grazie a tutti e due! Fondamentalmente non ho mai forzato l'uso di JavaScript, ma non devo iniziare, è ovunque ... A proposito, la mia seconda domanda, come gestire l'archiviazione tra le pagine nell'ambiente Windows? – Sami

+0

Una chiusura può essere utilizzata per recuperare 'temperature' dal localStorage all'interno della funzione' onDeviceReady' se si 'addEventListener' per l'evento' click' del pulsante all'interno della funzione 'onDeviceReady' (invece di scrivere' onclick' nell'html) ma potrebbe essere solo complicare le cose. @Sami Non ho esperienza con Windows Phone quindi lo lascerò con Bryan. –