2013-04-02 11 views
5

Sto utilizzando $.mobile.navigate("#test-page", {id:123}) per passare a una pagina secondaria.jQuery Mobile navigate - Perché lo stato è vuoto?

La navigazione da una pagina all'altra funziona correttamente .... ma lo stato è vuoto!

I documenti mostrano chiaramente che lo stato deve contenere tutte le informazioni di cui ho bisogno quando viene eseguita la navigazione.

Questo è il codice che sto utilizzando:

$(window).on('navigate', function(event, data) { 
    console.log("navigated", data); 
    console.log(data.state.info); 
    console.log(data.state.direction); 
    console.log(data.state.url); 
    console.log(data.state.hash); 
    if (data.state.hash === "test-page") { 
    console.log("Test page", data.state.id); 
    } 
}); 

Purtroppo i dati vengono passati come vuoto:

{ 
    state:{} 
} 

L'HTML è il seguente:

<div id="test-home" data-role="page"> 

     <div data-role="header"> 
      <h1>Test Home</h1> 
     </div> 
     <div data-role="content"> 
      <div id="test-btn"> 
      Click DIV for TEST page 
      </div> 
     </div> 
     <div data-role="footer"> 
     </div> 

    </div> 


    <div id="test-page" data-role="page"> 
    <div data-role="header"> 
      <h1>Test Page</h1> 
    </div> 

    <div data-role="content"> 
     Test page 

    </div> 
    </div> 

Spero che qualcuno possa aiutarti. Grazie!

+0

'state' viene creato quando si utilizzano i tasti di navigazione del browser (avanti/indietro). – Omar

+0

'state: hash dell'oggetto:" # test-page "url:" file: /// C: /Users/Omar/Desktop/experiements/navigation.html#test-page "' quando passo a '# test-page '. – Omar

+0

@Omar, grazie! Proverò a cambiare alcune cose per capire cosa c'è che non va ... le dipendenze sono al di fuori del CDN. – RadiantHex

risposta

3

$.mobile.navigate e navigateevento, sono utilizzati per tracciare la storia URL e passare/recuperare i dati da URL. Funzionano con la navigazione del browser (indietro/avanti).

Per passare dinamicamente i dati tra le pagine all'interno di un'applicazione Web utilizzando la navigazione interna, utilizzare $.mobile.changePage.

Risorse:

Utilizzare il codice qui sotto per passare i dati da pagina all'altra.

$.mobile.changePage('store.html', { 
dataUrl: "store.html?id=123", 
data: { 
    'id': '123' 
}, 
reloadPage: true // force page to reload 
}); 

Per recuperare i dati

$('.selector').on('pagebeforeshow', function() { 
var values = $(this).data("url").split("?")[1]; 
id = values.replace("id=", ""); 
console.log(id); 
}); 
+0

i dati e l'url dei dati devono corrispondere? – JonWells

+0

@CrimsonChin 'dataUrl' per aggiornare la posizione del browser,' data' viene utilizzato per inviare dati alla funzione 'ajax'. Nel tuo caso, recupera i dati da 'dataUrl'. – Omar

+0

ma ciò non funziona con la navigazione del browser (ad esempio premendo i pulsanti Indietro/Avanti) – Kzar

1

So che è una vecchia questione, ma la risposta di @ Omar può essere migliorata.

In realtà, è possibile utilizzare pagecontainerbeforehide, pagecontainerbeforeshow, pagecontainerhide, pagecontainershow, pagecontainertransition e pagecontainerchange (sono sparati in questo ordine) e all'interno del gestore è possibile leggere la proprietà history.state, che a quel punto viene aggiornato con il nuovo stato.

Così, per esempio, è possibile scrivere (per inizializzare le cose che hanno bisogno di pagina già formattato, ad esempio Google Maps):

$(document).on("pagecontainershow", function(e, data) { 
    console.log("pagecontainershow: " + JSON.stringify(history.state));  
}); 

Questo funziona in tutti i casi: se si fa clic su un link (con un hash, ad esempio #user), se si naviga con i pulsanti Indietro e Avanti, se si utilizza $.mobile.navigate e anche per window.history.back().

Inoltre, è possibile trasmettere dati complessi, non limitati ai vincoli della stringa di query.

Risorse:

Problemi correlati