2012-09-05 4 views
2

이처럼 보이는 URL을 일치하는 백본 경로를 설정 하시겠습니까 된 파라미터는 "직관적 인"파생 상품 "백본 노선들은

 
Base format: http://www.domain.com/PageName/:argument 
Example:  http://www.domain.com/PageName/1234567890 

은"직관 "의 모든

 
Base url:      http://www.domain.com/PageName/1234567890 
With tailing slash:    http://www.domain.com/PageName/1234567890/ 
Base url with query params:  http://www.domain.com/PageName/1234567890?x=1 
Tailing slash and query params: http://www.domain.com/PageName/1234567890/?x=1 

문제는 백본 경로 슈퍼 추악한지고 있다는 것입니다 :

 
routes:{  
    "PageName/:argument":   "main", 
    "PageName/:argument/":   "main", 
    "PageName/:argument/?:params": "main", 
    "PageName/:argument?:params": "main" 
} 
,536,913 파생 상품은, 내 의견으로는 이러한 URL의 모든 것

이 경로가 4 줄 대신 한 줄로 표현되어야한다고 생각합니다. 또한 URL 매개 변수를 인수로 보낼 필요가 없습니다. 그렇게하지 않고도 URL 매개 변수를 사용할 수 없습니다.

어떻게이 경로를 더 잘 지정할 수 있습니까?

또한이 문제를 잘못 알고 있습니까? 나는이 문제가 시작되었다는 사실이 문제의 근본적인 오해와 관련이 있다고 느낀다.

감사합니다.

답변

3

.route()과 정규식을 사용해 보셨습니까? 선택적인 route 요소를 원한다면 정규 표현식을 사용하는 것이 좋습니다. 그것은 routes 해시 대신 .initialize()에 경로를 정의하는 것을 의미하지만 문제가 해결되고 코드가 적습니다.

나는이 테스트를하지 않은,하지만 난 그것을 볼 것이라고 생각 같은 :

initialize: function(options) { 
    this.route(/PageName\/([^\/\?]+)\/?\??(.*)/, "main"); 
} 

(정규식을 테스트하는 하나의 작은 문제가 여기에 노출 : 당신은 PARAMS 인수에 대해 undefined을 빈 문자열을하지거야 그러나 그것은 아마도 당신에게 문제가되지 않을 것입니다.)

+0

그래, 아마 내가해야 할 일이다. 정말 고마워! –

+0

이 예제에서 쿼리 문자열을 추출하여 전달할 수있는 방법은 무엇입니까? – Jonathan

+0

문서에서 : "경로 또는 정규 표현식의 각 일치 캡처는 콜백에 인수로 전달됩니다." 그래서 두 개의 괄호 안의 패턴은'main' 핸들러에 전달되어야합니다. – nrabinowitz