2012-12-06 27 views
5

Ứng dụng của tôi về cơ bản có một số đầu vào biểu mẫu và trả về một tập hợp các kết quả. Tôi có hai tuyến đườngđịnh tuyến backbone.js khi truy vấn được chuyển đến tuyến đường chứa/

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

Nếu truy vấn chứa bất kỳ ký tự/cụ thể nào (có thể xảy ra hoàn toàn trong trường hợp này), chúng sẽ được thêm vào URL và ngắt quãng của tôi.

Tôi đã thử sử dụng encodeURI()encodeURIComponent() chút Tôi không có bất kỳ may mắn nào. Bạn làm cách nào để xử lý những thứ như vậy?

Trả lời

4

Bạn có thể sử dụng encodeURIComponent khi tạo URL để chuyển đổi / thành %2F và sau đó decodeURIComponent bên trong trình xử lý tuyến đường để chuyển đổi chúng trở lại; HTML sẽ kết thúc như thế này:

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

và sau đó trong các bộ định tuyến:

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

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

Ngoài ra, bạn có thể sử dụng một splat route:

Tuyến có thể chứa các phần tham số, :param, khớp với một thành phần URL đơn lẻ vi chém; và các bộ phận tách rời *splat, có thể khớp với bất kỳ số lượng thành phần URL nào.

Vì vậy, HTML của bạn sẽ như thế này:

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

và router của bạn:

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

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

+0

Sử dụng một tuyến đường splat và nó làm việc tuyệt vời. Cảm ơn bạn vì sự giúp đỡ. – Charles

Các vấn đề liên quan