2012-07-06 6 views
6

Ho un popup modale che all'apertura modifica l'URL. Quando un utente chiude il popup, voglio tornare all'URL precedente ma non voglio attivare il percorso associato a quell'URL perché questo ricaricherà la mia raccolta e renderizzerò la vista ecc. C'è un modo per chiamare window.history.back() senza attivare il percorso, o c'è un equivalente backbone di questo?Utilizzo di Backbone.history per tornare indietro senza attivare la funzione route

L'unica soluzione che viene in mente sarebbe quello di salvare il percorso precedente, poi, quando il modale è chiamata chiuso

Backbone.history.navigate(route, {trigger: false, replace: true}); 

, ma questo mi sembra un modo complesso per risolvere un problema facile.

+1

Il mio suggerimento (e mi dispiace che non risponda alla tua domanda) è quello di considerare cosa succederebbe se loro segnalassero la tua pagina mentre il popup è visualizzato. Se ritornano direttamente su http://yoursite.com/#popup/route, potrebbero comportarsi in modo strano. Se non si comporta in modo strano, cosa succederebbe se chiudessero la finestra di dialogo modale? Nella mia esperienza, non ho usato i router per causare una finestra di dialogo modale per questi motivi. Spero che questo abbia un senso. – timDunham

+0

Se memorizzare la pagina, e poi tornare a yoursite.com/#popup/route li reindirizzerà a una versione html statica di quella comparsa in yoursite.com/popup/route, quindi non c'è alcuna possibilità di chiudere il popup. – Barny

risposta

5

Memorizzare la cronologia in un router sembra una buona soluzione per me, non sono riuscito a trovare un modo migliore per risolvere questo problema.

Una buona soluzione di che è qui: Silently change url to previous using Backbone.js

vorrei fare un tweak minore quindi sarebbe simile a questa:

class MyRouter extends Backbone.Router 

    initialize: (options) -> 
    @on "all", @storeRoute 
    @history = [] 

    storeRoute: -> 
    @history.push Backbone.history.fragment 

    previous: -> 
    if @history.length > 1 
     @navigate @history[@history.length-2], false 
    else 
     @navigate '', true 

Poi si può chiamare MyRouter.previous(), e se vieni per richiesta diretta, ti porterà alla tua radice.

Vorrei che fosse una funzionalità predefinita del router, almeno per il fatto che conserva 5 rotte.

Problemi correlati