2012-12-06 9 views
5

Moja aplikacja zasadniczo pobiera dane wejściowe i zwraca zestaw wyników. Mam dwie trasyroutbone.js routing, gdy zapytanie przekazane do trasy zawiera/

routes: { 
     '': 'search', 
     'search': 'search', 
     'results/:query': 'results' 
    }, 
    results: function(query) { 
     var search = new ResultsSearchView(); 
     var grid = new GridView({ query: query }); 
    } 

Jeśli zapytanie zawiera żadnych znaków/specjalnie (można całkowicie się zdarzyć w tym przypadku), są one dodawane do adresu URL i moich przerw trasy.

Próbowałem używać encodeURI() i encodeURIComponent() bit Nie mam szczęścia. Jak radzicie sobie z takimi rzeczami?

Odpowiedz

4

Można użyć encodeURIComponent podczas budowania URL do konwersji / do %2F a następnie decodeURIComponent wewnątrz obsługi trasy konwertować je z powrotem; HTML skończy wygląda tak:

<a href="#results/pancakes">no slash</a> 
<a href="#results/where%2Fis%2Fpancakes%2Fhouse">with slashes</a> 

a następnie w routerze:

routes: { 
    'results/:query': 'results' 
}, 
results: function(query) { 
    query = decodeURIComponent(query); 
    // Do useful things here... 
} 

Demo: http://jsfiddle.net/ambiguous/sbpfD/

Alternatywnie, można użyć splat route:

Trasy może zawierać części parametrów, :param, które pasują do pojedynczego komponentu URL pl ukośniki; i splat części *splat, które mogą pasować do dowolnej liczby składników URL.

Więc HTML byłoby tak:

<a href="#results/pancakes">no slash</a> 
<a href="#results/where/is/pancakes/house">with slashes</a> 

i routerem:

routes: { 
    'results/*query': 'results' 
}, 
results: function(query) { 
    // Do useful things here... 
} 

Demo: http://jsfiddle.net/ambiguous/awJxG/

+0

Korzystanie z trasy ikona i wszystko działa świetnie. Dziękuję za pomoc. – Charles

Powiązane problemy