2012-04-09 13 views
0

나는 아주 간단한 작업을하려고합니다.백본 라우터/en/# xyz가 아닌/# en/xyz

여기에 시나리오가 있습니다 : 나는 pushstate가 가능한 브라우저와 잘 작동하는 전체 사이트를 보유하고 있습니다.

/en/whatever/etc = index.en.php with with english headers and encoding & tweaks 
/ar/whatever/etc = index.ar.php with with arabic headers and encoding & tweaks 
/ru/whatever/etc = index.ru.php with with russian headers and encoding & tweaks 

정말 매끄러운 그리고 내가 언급 한 바와 같이 pushstate와 함께 잘 작동 :이 사이트는 언어가 인스턴스에 대해 "실제 페이지"입니다 기초를 작동합니다. 문제는 해시 대체와 동일한 라우터 코드를 사용하려고 할 때입니다.

/en/#whatever/etc 
/ar/#whatever/etc 
/ru/#whatever/etc 
..and so on 

or even: 

/en/#/whatever/etc 
/ar/#/whatever/etc 
/ru/#/whatever/etc 
..and so on 

하지만이를 구현하기 위해 백본에게 소스를 조정하지 않고 방법을 찾을 수 없습니다 :

/#/en/whatever/etc = bad because it's not based correctly 
/#/ar/whatever/etc = and so on 

내가 그것을하고 싶은 것은 :

백본의 라우터는이 작업을 수행 할 것으로 보인다 . 나는 futureproofing 요인 때문에 정말로해야하지 않는 한 백본을 바꾸는 것에 반대합니다.

누구든지 어떤 생각이 있습니까?

답변

5

당신은 문서 Backbone History object:

견적에 root 옵션을 사용해야합니다

응용 프로그램이 루트 URL에서 제공되지 않는 경우/도메인의 역사 곳을 알려주십시오 자체 그때 당신은 그들이 사용중인 언어에 보이는 방문 페이지에 발생하는 몇 가지 코드를해야 할 겁니다 Backbone.history.start({pushState: true, root: "/public/search/"})

및 : 루트 정말 옵션으로,이다 그들을 /[LANG CODE]/에 nds. 그런 다음 서버에서 /[LANG CODE]/에 대한 요청을 .html 파일에 매핑하면됩니다.

HTML 파일에서 location.pathname 변수를 살펴보고 첫 번째 /[LANG CODE]/ 부분을 제거하고이를 옵션 해시 값 인 root으로 사용하십시오.

var lang = "/"+_.first(location.pathname.split('/')+"/"; 
Backbone.history.start({pushState: true, root: lang}); // if you're using pushState, otherwise omit or set to false 

이 URL이 원인이 될 것입니다 :

/en/#whatever/etc 
/ru/#whatever/etc 
+0

헤이 덕분에 다시 나를 tkone 절약을 위해! 곧 포인트 대신 지폐를 보내야 할 것입니다 ;-) – Alex

+0

@Alex 하하는 문제가 아닙니다. 서비스의 기쁜! – tkone