2012-07-15 27 views
7

Acabo de empezar a estudiar Phonegap + jQuery Mobile y HTML5, así que no pierdas el control con mi idiotez.Lectura y escritura de localStorage?

¿Podría alguien decirme por qué esto no funciona? Cuando estoy usando una variable de localStorage, obtengo una pantalla vacía cuando presiono el botón, pero cuando uso una temperatura variable = "100", funciona bien. 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> 

Otra pregunta: ¿Cómo manejar las variables entre las páginas en Windows Phone? No soportan localStorage, ¿hay otra forma de manejar esto si no tienes conexión db?

Gracias!

Sami

+0

No tengo experiencia con phonegag o android, pero estoy bastante seguro de que es un problema de alcance/cierre. Está definiendo 'var temperature' dentro de la función' onDeviceReady', solo está definida dentro de ese alcance. No puede usarlo dentro de 'myFunction' ya que esa variable tiene un alcance completamente diferente. Me gustaría enviar esto como una respuesta, pero ¿cómo es que nadie respondió esto en 35 minutos? –

+0

¡U solo puede enviar eso como una respuesta! ¿Hay alguna manera de hacer variables "globales" en JavaScript? Creo que sí. Necesito resolverlo. ¡Muchas gracias! – Sami

+0

Sí, Bryan acaba de hacer un ejemplo. Agregaré algo a su respuesta y como estoy un poco cansado de hacer una respuesta "completa". ':)' –

Respuesta

10

temperature es local en el ámbito de la función onDeviceReady. Es decir, una vez que la función termina, se va.

Usted tiene dos opciones:

// 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; 
} 

Para una buena lista de ejemplos de ámbito de la función, tratar this answer.

+0

[¿Cómo funcionan los cierres javascript?] (Http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) también es una buena referencia (aunque es un poco más profundidad para subfunciones). –

+0

¡Gracias a los dos! Básicamente, nunca me obligué a usar JavaScript, pero no tengo que comenzar, está en todas partes ... Por cierto, mi segunda pregunta es cómo manejar el almacenamiento entre páginas en el entorno de Windows. – Sami

+0

Se podría usar un cierre para recuperar 'temperature' de localStorage dentro de la función' onDeviceReady' si 'addEventListener' para el evento' click' del botón dentro de la función 'onDeviceReady' (en lugar de escribir' onclick' en el html) , pero eso podría complicar las cosas. @Sami no tengo experiencia con Windows Phone, así que lo dejo con Bryan. –

Cuestiones relacionadas