2011-11-21 7 views
19

Tutta la documentazione di JQuery Mobile che posso trovare sulla navigazione all'indietro presuppone che lo farò utilizzando un tag di ancoraggio e suggerisco di aggiungere data-rel="back" al tag.

Non sto navigando da un tag, che sto miscelazione con PhoneGap che significa che sto chiamando funzioni javascript come PhoneGap.something(goForwardOnSuccess,goBackwardsOnFailure);

dove

function goFowardOnSuccess() 
{ 
    $.mobile.changePage('#next', { transition: 'pop' }); 
} 
function goBackwardOnFailure() 
{ 
    $.mobile.changePage(/* I HAVE NO IDEA WHAT GOES HERE */); 
} 

Una delle cose principali che sto utilizzando questo genere di cose è mettere un "Busy Doing Something in Native Code Do not Touch Me ..." fare clic sullo schermo di protezione con il "caricamento" e poi chiuderlo nelle funzioni di completamento.

Tuttavia, trovo che quando provo che da un pulsante su uno schermo sono "scattato" in posizione, mi ritrovo nella home page (risale a due livelli).

La documentazione è esasperatamente vaga su come navigare indietro da puro javascript. Qualsiasi indizio sarebbe molto carino.

Si noti inoltre che io tendo a scattare da questi schermi occupati da ovunque in modo esplicito codificando una transizione sullo schermo che voglio non è davvero un'opzione.

risposta

0

Una chiamata a history.back() lo farà.

+0

Non funziona. Salta indietro di due livelli che, immagino, non è sorprendente dato che è quello che changePage chiama se c'è un 'reverse: true' nelle opzioni. Ho finito per salvare $ .mobile.activePage e quindi passare a quello con changepage e reverse: true. Questo sembra funzionare, ma non dovrebbe essere così difficile. –

2

Si sta andando indietro "due livelli", perché se il fuoco changepage di programmazione tramite

$.mobile.changePage('#next', { transition: 'pop' }); 

e omette tutte le altre opzioni, si sta innescando due funzioni:

  • changepage
  • hashChange

Normalmente su una transizione normale, hashChange è bloccato, mentre su transizioni all'indietro, la pagina di modifica deve essere bloccata (non è sicuro qui ...). Quindi nel tuo caso hai il tuo (voluto) hashChange e una transizione indesiderata (changePage).

Controllare il JQM docs per le opzioni che è possibile inoltrare nella chiamata di changePage o cercare nel codice sorgente 1.0 # 3140 per tutte le opzioni disponibili. Vorrei provare anche a passare changeHash: false o fromHashChange: true insieme alla chiamata della funzione e vedere cosa succede.

Se vuoi scavare più a fondo devi cercare ignoreNextHashChange e come il suo valore cambia anche se JQM.

3

Perché non usare solo data-rel="back" come attributo per il pulsante Indietro, questo richiederà all'utente 1 pagina.

anche equivalente a history.back()

+2

Come già detto - "Non sto navigando da un tag, mi sto mescolando con PhoneGap che significa che sto chiamando funzioni javascript come PhoneGap.something (goForwardOnSuccess, goBackwardsOnFailure);" Quindi voglio tornare come un effetto collaterale di fare una scelta sulla pagina. –

34

E 'sicuramente non chiaro nella documentazione, ma ci sono piccole allusioni ad esso.

Prova con:

$.mobile.back(); 
4

ha senso utilizzare data-rel="back" per qualcosa di simile: <a href="#" data-rel="back" ...

ma è meglio usare history.back(); all'interno codice javascript blog cioè

..... 
..... 
    var cId = $(this).val(); 
    // do something with control ID then 
..... 
..... 
    goBackParent(); 
} 
function goBackParent(){ 
    history.back(); 
} 
0

Aggiungi changeHash: true da dove stai reindirizzando. Quindi utilizzare "history.back()" o "history.go (-1)" dalla pagina corrente. Ci vorrà solo 1 pagina indietro.

$.mobile.changePage("yourpage.html",{ transition: "flip", changeHash: true}); 
Problemi correlati