2012-02-20 18 views
7

Questa è probabilmente una domanda super facile, in una vista, lego un evento "click" a un pulsante, quando si fa clic su quell'evento, desidero reindirizzare a una pagina completamente nuova (ad esempio non una rotta).backbone andare a un'altra pagina

ad es.

events : {  
    "click .button" : 'redirect' 
}, 
redirect : { 
    window.location('otherlink'); 
} 

Potrei usare window.location, ma sembra che sia nel modo sbagliato? qualche idea apprezzabile?

risposta

2

Vorrei semplicemente utilizzare un semplice <a href="otherlink">Link Title</a>. Se il collegamento è dinamico, farei affidamento su una vista per eseguire il rendering del collegamento e gestire il suo stato e href.

Se avete bisogno di fare qualcosa prima che lasciando l'utente andare il dell'uso della pagina secondaria e gestore di eventi senza il event.preventDefault() o evitare per tornare false.

13

Backbone ha un "router" (che è sostanzialmente quello che ho imparato a conoscere come controller). Puoi usarlo per fare la navigazione. Ad esempio:

var MyApp = new Backbone.Router(); 
MyApp.navigate('newPage', {trigger: true}); 

il trigger assicura che venga generato un evento nel caso in cui si stiano utilizzando tali eventi.

È possibile associare il router alla "cronologia" di Backbone e creare facilmente un'applicazione di una sola pagina piuttosto impressionante.

Modifica: Non importa, ho appena riletto che non volevi usare un percorso. I miei due centesimi: fai un wrapper per fare la navigazione per te. Ho appena dovuto refactoring una grande applicazione javascript poche settimane fa, eliminando un centinaio di window.locations in modo che potesse essere testato su unità. Non molto divertente. Cioè:

MyApp = { 
    navigate: function (url) { window.location = url; } 
} 

Ora si può effettivamente fare unit testing, come si può ignorare MyApp.navigate con qualcosa che non fa nulla quando viene chiamato. È inoltre possibile aggiungere la logica di business se necessario .. o filtri .. o qualsiasi altra cosa .. senza dover disturbare il resto dell'applicazione. Ad esempio, se l'url è al di fuori del sito, aprilo in una nuova finestra invece di mostrarlo nella stessa pagina.