2012-08-07 14 views
5

Sto cercando di implementare una funzione di ricerca per il mio sito web. Quando l'utente digita un termine di ricerca foobar in una scatola input e lo invia, è reindirizzato a http://mydomain.com/search?query=foobar.In caso Backbone.js acquisisca i parametri GET dall'URL?

Problema :: Come dovrei prendere i parametri GET query dal URL e inviarlo al backend e ottenere una serie di risultati indietro come una risposta JSON? Dovrei farlo anche in questo modo?

Il mio attuale tentativo di sotto non addirittura causare la funzione search da attivare.

Router

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     'search?query=:query': 'search' 
     // ... and some other routes 
    }, 

    search: function(query) { 
     this.photoList = new SearchCollection(); 
     var self = this; 
     this.photoList.fetch({ 
      data: {query: query}, 
      success: function() { 
       self.photoListView = new PhotoListView({ collection: self.photoList }); 
       self.photoListView.render(); 
      } 
     }); 
    } 

}); 

var app = new AppRouter(); 
Backbone.history.start({ 
    pushState: true, 
    root: '/' 
}); 

risposta

5

Ci sono stati diversi problemi legali contro Backbone per questo problema. V'è un plugin esistente che funziona bene per questo:

https://github.com/jhudson8/backbone-query-parameters

In alternativa, Attualmente sto usando parametri di stringa di query in un API finta che corrisponde corrispondente percorso di Backbone. Simile a questa

percorso

"/api/v2/application/:query"

Query

application: function(query) { 
    var params = $.deparam(query.slice(1)); 
    // params.something... 
} 

Per quanto riguarda il problema reale a portata di mano come stai reindirizza a index.html per sostenere pushState?

+0

L'utente può andare a 'domain.com',' domain.com/something', 'domain.com/search' e il router verrà eseguito il corretto funzionamento di rendere gli elementi sulla pagina. Interagendo con link/pulsanti/schede sulla pagina 'app.navigate()' a un segmento URI diverso. Questo risponde alla domanda sul reindirizzamento a 'index.html' per supportare' pushState'? – Nyxynyx

+0

No, non lo è. Voglio sapere come stai configurando il tuo server per pushState, non è automatico. In particolare, devi configurare il tuo server web per gestire altrimenti 404 per reindirizzare a index.html. – tbranyen

+0

Nel mio framework PHP ho un router che controlla se il percorso è valido prima di eseguire il rendering della pagina contenente backbone.js. Se l'URL non è valido, il router PHP reindirizzerà a 404. – Nyxynyx

-1

Ci sono pochissimi casi in cui è necessario leggere l'URL ed estrarre i params GET. Penso che tu stia facendo delle cose sbagliate e qui ci sono le mie opzioni:

1) se hai una sola pagina nella tua app (pagina app singola) puoi visualizzare i risultati mentre digitano nel tuo campo input o dopo che hanno colpito submit

2) se si reindirizzano l'utente a una pagina diversa che significa che è possibile bootstrap data in modo che dopo la pagina viene caricata backbone sarà solo avere per rendere i risultati e fare solo altre richieste se si cambia la parola da cercare

3) si può avere una variabile javascript che viene inizializzato al caricamento della pagina direttamente fro m il server in cui si lavora con GET params è probabilmente più facile

+5

Tranne che nessuno di questi consente a un utente dell'applicazione di condividere il proprio stato con qualcun altro. – tbranyen

2

mi ha colpito questo stesso problema e contemplato con backbone-query-parametri, ma che dovrebbe essere considerato in generale un approccio corretto.

La stringa di query URL non è significato per il front-end. Vengono inviati al server e impongono un aggiornamento durante la navigazione da page.html a page.html? Something = something.

Si dovrebbero invece utilizzare i frammenti di hash. Ad esempio, http://www.example.com/ajax.html#key1=value1&key2=value2, è sufficiente ottenere quei valori come il normale backbone e creare i parametri della richiesta da quello.

Vedi https://github.com/jashkenas/backbone/issues/891, https://developers.google.com/webmasters/ajax-crawling/docs/specification, http://tools.ietf.org/html/rfc3986#section-3.5

Problemi correlati