2011-12-18 6 views
16

C'è un modo per attivare lo stesso percorso di posizione in backbone.js, ad esempio quando la posizione è /My/App/#/About e l'utente fa nuovamente clic su ancora con lo stesso percorso per aggiornare il contenuto della pagina.Trigger stesso percorso di posizione

risposta

6
Router.navigate('about', true); 

In questo modo è possibile attivare manualmente un percorso.

+3

Non aggiornato: https://github.com/jashkenas/backbone/issues/1214 – hongymagic

3

Supponendo che si vuole fare questo per più di una semplice pagina Chi, uso:

route = Backbone.history.fragment; 
yourRouter.navigate(route, true); 
1

Usando Backbone 0.9.2 si passa in un oggetto opzioni e impostare 'trigger' a 'vero'.

router.navigate('some/route', { trigger : true }); 

Riferimento: http://documentcloud.github.com/backbone/#Router-navigate

+0

Questo non funziona per ricaricare il percorso corrente. navigare restituisce se il frammento di destinazione corrisponde al frammento corrente. – DriverDan

52
Backbone.history.loadUrl(Backbone.history.fragment); 

La soluzione per il vostro problema specifico non è realmente documentata e sembra la migliore pratica suggerita è di chiamare solo la funzione dichiarata nel percorso che si desidera fuoco:/

Rif: https://github.com/documentcloud/backbone/issues/1214

Finora le altre risposte sono corrette, ma hanno dimenticato di dire che, se l'hash navigato è uguale all'hash corrente, non sparerà nulla.

+3

Sembra che sia l'unica risposta che permette davvero di aggiornare la stessa pagina, grazie! –

+2

Non dovremmo usare Backbone.history.getFragment() in modo da non raggiungere le proprietà della cronologia? Sembra più pulito nella mia mente. – Rob

+0

'getFragment()' sarebbe sicuramente un approccio più appropriato con il backbone più moderno. Tuttavia, vorrei fare +1 sul commento sull'esecuzione della funzione dichiarata invece di cercare di ingannare il router per l'aggiornamento. – mix3d

2

Poiché il router Backbone cerca le modifiche nel frammento di URL che si desidera caricare, ciò che ha funzionato per me è passare a "/" prima senza trigger e quindi successivamente all'URL (frammento) che si desidera colpire con grilletto. Probabilmente potresti farlo nel comportamento predefinito del router abbastanza facilmente se lo volessi.

ad es.

App.Routers.appRouter.navigate '/', {trigger: false} 
App.Routers.appRouter.navigate myPath, {trigger: true} 
0

Grazie per il suggerimento @eddywashere, davvero fantastico. Ho aggiunto una piccola modifica alla mia che controlla se sei sull'ultimo URL (più aggiornato), e in tal caso, carica quella cronologia. Abbastanza semplice, pensato che potrebbe aiutare qualcuno con lo stesso problema.

$("[data-href]").on("click", function(e) { 
    var href; 
    e.preventDefault(); 
    href = $(e.currentTarget).data("href"); 
    if ((_.last(this.history)) === href) { 
    return Backbone.history.loadUrl(_.last(this.history)); 
    } else { 
    return this.router.navigate(href, true); 
    } 
}); 
+0

cura di condividere questo in javascript normale invece di coffeescript? – mix3d

+1

@ mix3d sicuro. Ho modificato il post originale. –

0

Un'altra opzione: è possibile aggiungere un parametro con un valore casuale, in modo da hash sarà diverso per ogni chiamata, anche se si chiama la stessa pagina.

-1

router.navigate (route, {trigger: false}); // URL cambia ma non si innescherà ... Es: Al posto di percorso - 'circa/1' o 'di' ecc

Backbone.history.loadUrl (Backbone.history.fragment); // Il percorso modificato verrà attivato qui.

Problemi correlati