백본 라우팅 및 쿼리 매개 변수는 불행한 결혼입니다. 문제는 this GitHub issue에 잘 설명되어 있습니다.
Backbone.Router
은 URL 해시 조각 및 pushState API와 함께 작동하도록 설계되어 있습니다. 해시 URL을 사용할 때 쿼리 문자열은 해시 앞에 나오며 경로에서 일치하지 않습니다. pushState를 사용하면 쿼리 문자열은 URL 단편의 일부이므로 다른 경로 표현식이 필요합니다.
은의 당신이 경로
search
이있을 것이다라고하자, 그 경로는 선택적 매개 변수
q
,
sort
및
type
를 취할 것입니다. 같은 보일 것이다 쿼리 문자열과 같이 문제가
search?q=kittens&sort=asc&type=images
를, 그 이전 버전의 브라우저 사용자를위한, 백본 hashchange
기반 라우팅으로 돌아갑니다, 그리고 경로가 될 것입니다 :
?q=kittens&sort=asc&type=images#search
플러그인을 사용하면이 문제를 해결하려고 시도하지만 핵심 문제는 해결되지 않습니다.
가능한 경우 쿼리 문자열을 사용하지 말고 경로 표현식에 선택적 조각을 사용하여 상태 정보를 전달해야합니다. 위의 예 경로는 될 것입니다 :
//pushState
search/q/kittens/sort/asc/type/images
//hash fragment
#search/q/kittens/sort/asc/type/images
이 (optional)
경로 부품 :captures
(docs)를 사용하여 다음과 같은 식으로 URL을 나타낼 수 :만큼 경로 조각에로
var Router = Backbone.Router.extend({
routes: {
"search(/q/:query)(/sort/:sort)(/type/:type)": "search"
},
search: function(query, sort, type) {
console.log(query, sort, type); //-> "kittens", "asc", "images"
}
});
을 예를 들어, 지정된 순서와 일치하지 않는 URL, 임의의 모든 매개 변수와 일치합니다.
search //-> undefined, undefined, undefined
search/q/kittens/type/images //-> "kittens", undefined, "images"
search/sort/asc/type/images //-> undefined, "asc", "images"
이 w ay 타사 쿼리 문자열 라이브러리 또는 브라우저 호환성에 대해 걱정할 필요가 없습니다. 그리고 나에게 묻는다면 후자의 URL이 더 깨끗해진다.
편집과 같이 될 것이다 : 나는 https://github.com/jhudson8/backbone-query-parameters 플러그인을 사용하고 있습니다. – TIMEX
질문을 좀 더 명확하게 만들 수 있습니까? 다른 페이지로 이동할 때마다'location.search'를 비우고 싶습니까? –
도 [github에]에 약 2 일 전에 게시 된 문제 (https://github.com/jhudson8/backbone-query-parameters/issues/29)에 보인다 및 저자는이 기능에 근무하지 않는 것 같습니다. – Starx