2012-04-13 2 views
1

웹 서버의 컨트롤러와 백본 라우터 간의 호환성을 어떻게 얻습니까? 사용자가 링크를 클릭하면보기가 렌더링되고 URL은 다음과 같이 표시됩니다 : /test/1, 원하는 것을 설정합니다. 사용자가 주소 표시 줄에 test/1을 입력하여 액세스하려고하면 문제가 발생합니다. 백엔드에는 URL 라우팅을 담당하는 컨트롤러가 있습니다.백본 라우터 및 웹 서버 컨트롤러와의 호환성

백엔드 경로가 아닌 백본 경로를 사용하려면 어떻게해야합니까?

작동하는 한 가지 방법은 URL #test/1에 액세스하는 것입니다. 북마크가 가능하며 검색 주소창에 입력 할 수 있습니다. 문제는 백본이로드시 #을 줄입니다.

  1. 하는 백엔드 컨트롤러가 백본 경로와 상호 작용하는 얻기 그들이 내부에 입력 할 때
  2. 그것이 그래서 #의 '이 (S)가 제거되지 않습니다 확인 :

    그래서, 난 내 문제에 대한 두 가지 솔루션을 참조 주소 표시 줄.

위의 솔루션 중 어느 것을 권장합니다. 그리고 어떻게 구현할 것인가? 두 번째 솔루션은 더 쉬워 보이지만, 백본이 해시의 URL을 제거하지 않도록하려면 어떻게해야합니까?

답변

2

사용자가 루트 페이지로 이동 한 다음 링크를 통해/1을 테스트하면 논리가 백본에서 처리되고보기가 렌더링 될 때부터 알 수 있습니다. 그러나 사용자가 직접 test/1로 이동하면 올바르게 처리되지 않습니다.

이 문제를 해결하려면 서버에서 백본에서 처리하는 URL을 루트 페이지로 가리키는 경로를 설정해야합니다. 이것에 대한 논리는 지정하지 않은 서버에 따라 다릅니다.

RouteTable.Routes.MapWebPageRoute("test/{id}", "~/Default.cshtml", new {}, new { id = "\\d+" }); 

여기에는 사용자가 이동 한 경우와 동일한 핸들러 될 기본 페이지에서 처리하는/1 테스트로 URL을 일으킬 것입니다 :이 같은 경로가 설정 수도 ASP에서이 같은 작업을 수행하려면 /. 페이지가 클라이언트에로드되면 백본 라우터는 테스트/1 경로에 대해 실행됩니다.

+0

장고를 사용하면 어떻게 될지 알고 있습니까? – egidra

+0

URLconf에 다음과 같이 입력하십시오 : urlpatterns = patterns ('', (r '^ test/(\ d +)', 'default_function') ) –

+0

https://docs.djangoproject.com/en/dev/topics/http/urls/ –

0

글쎄, 실제로 URL에 항상 #을 포함시켜야하는 데에는 많은 이유가 있습니다. 그것은 많은 일을 더 잘합니다. 예를 들어 올바른 컨트롤러가 웹 서버에 의해 자동으로 선택되고 URL을 수동으로 입력하거나 즐겨 찾기를 사용하거나 다른 사이트의 링크를 사용하거나 또는 웹 사이트의 앞뒤 단추를 사용하여 백본에 올바른 경로가 자동으로 제공됩니다. 웹 브라우저. 그래서 선택 2는 당신이 원하는 것입니다. 이는 백본의 표준 동작이기도합니다.

제 질문은 "처음에는 #을 사용하지 않으려면 어떻게 백본을 사용 했습니까?"

편집 : why # is bad을 설명하는 훌륭한 기사를 가리키는 Chris Herring에게 감사드립니다. 그걸로 나는 그들이 어떤 종류의 고통을 견뎌야하는지 독자들에게 운동으로 남겨 둘 것입니다. 모든 백본 경로가 변경되는 동안 #은 여전히 ​​길어야합니다. 페이지의 정보가 표시되는 방법과 페이지의 정보가 아닌 방법입니다. 자바 스크립트를 지원하지 않는 웹 크롤러가 # 뒤에 오는 것과 관계없이 동일한 정보를 모두 긁을 수 있다면 여전히 문제는 보이지 않습니다.

+0

HTML5 푸시 스테이트 사용 예 Backbone.history.start ({pushState : true}). 브라우저가 지원하지 않으면 #으로 돌아갑니다. #에 문제가 있습니다. 예를 들어 Twitter가 멀어지고 있습니다. –

+0

@Chris, #와 관련된 문제에 대해 더 자세히 알려주십시오. 심각한 URL을 알지 못하기 때문에 (URL 당 하나의 제한을 제외하고). 백본에서 루트 페이지로 처리되는 URL을 가리키는 서버에서 라우트를 설정하는 솔루션은 실제로 문제의 핵심입니다. 가장 쉬운 해결책으로 #을 고수 할 것입니다. 그것은 문제를 청결하고 쉽게 해결하기위한 문제 중 하나입니다. 그렇지 않으면 서버 측 라우팅에 더 많은 복잡한 인텔리전스를 추가해야합니다. 네, 그게 더 강력하지만, 더 많은 작업과 더 큰 유지 관리 문제입니다. –

+1

이 기사 http://danwebb.net/2011/5/28/it-is-about-the-hashbangs는 몇 가지 문제점을 지적합니다. 몇 줄의 경로를 설정하는 것은 최소한의 작업입니다. 한 줄의 코드에서 모든 URL을 한 페이지로 가리키고 유지해야 할 작업이 많지 않거나 많을 수 있습니다. –