2012-06-25 2 views
3

현재 Ember.Router을 테스트 중이며 특정 기준과 일치 할 때 특정 경로에 대한 액세스를 어떻게 제한 할 수 있는지 궁금합니다. 필자는 예를 들어 결제 수단으로 이동하기 전에 결제 주소를 설정해야하는 결제 절차를 진행하고 있습니다 (예 : 결제 수단보기에서 결제 수단에 허용 된 결제 수단을 제공해야 함).).Ember.js (Ember.Router)의 특정 경로에 대한 액세스 제한

필자는 모델을 검증 (serialize : function() 또는 function()으로 입력)하고 특정 값이 설정되어 있지 않으면 라우터가 이전 상태 약간의 타임 아웃으로 이것을하기 위해서, 그렇지 않으면 해시가 올바르게 업데이트되지 않습니다). 여전히 좋은 대답이 질문에 관련이 있지만 아니지만

, 톰 데일에 의해 일부 단어를 찾았습니다 : "전체 여기

내 예제 코드

http://jsfiddle.net/mediastuttgart/uMKGt/

EDIT와 바이올린의 요점은 이런 상황을 피하는 것입니다 ... 현재 상황을 처리하는 것은 책임입니다. "

cf. http://github.com/emberjs/ember.js/issues/745

글쎄요.

EDIT2 : 위치 방법이 "널 (null)로 설정되는 동안이 말이더라도

. '해시'또는 '기록'을 사용하여 위치 상태를 처리 할 때 사용자가/index보다 더 깊은 경로에서 페이지를 다시로드하면 현재 경로가 값을 확인한 다음 특정 조건이 일치하지 않으면 결국 이전 경로로 리디렉션해야합니다 (실제로 유효성 검사는 이전 경로에 속합니다).

짧게 요약하면 현재 경로 유효성 검사는 이전 경로 유효성 검사에 의존해야하며 모든 조건이 충족되는 상태로 리디렉션되어야합니다.

역순 :

  • 전달 방법? (/ #/배송/방법) 없음 ->
  • 결제 방법은? (/ #/청구/방법) 없음 ->
  • 배달 주소? (/ #/배달/주소) 없음 ->
  • 청구서 수신 주소 - (/ #/청구서 수신/주소) 여기에서 시작하십시오. 기대

내가 같은 작업을했습니다 :)

답변

2

물건을 정리하기 위해 일부 EmberJS의 사람들을 볼 수 있습니다. 나는 당신이 옳은 길에 있다고 생각합니다. 톰이 국가 전체에 대해 정말로 그 핵심에 도달한다는 견적을 인용합니다. 라우터는 빠르게 변화하고 있으므로 여기에 설정된 패턴이 있는지 확실하지 않지만 지금까지 배운 것을 공유 할 수 있습니다.

일반적인 문제 요약 : Ember 라우터는 url을 사용하여 앱 상태를 직렬화/비 직렬화합니다. 요청 된 경로를 알고있는 것 외에는 상태가 저장되지 않습니다. 최종 사용자는이 상태를 완전히 제어 할 수 있으며 URL을 입력하여 모든 상태에서 앱을 다시로드 할 수 있습니다. 따라서 모든 응용 프로그램은 요청 된 상태가 사용자 권한과 모델의 현재 상태에 따라 '유효'한지 확인할 수있는 일반적인 문제가 있습니다.

레일즈에서 오는 첫 번째 본능은 필터 이전처럼 경로를 보호하는 것입니다. Ember에서는 까다 롭습니다. 데이터로드가 비동기 적이기 때문에 경로 계층으로의 초기 강하 중에는 사용할 수 없습니다. 이 접근 방식이 나 자신을 작동시키지 못했지만 다른 것들은 가지고 있습니다. 일반적인 접근 방식은 엠버 라우터의 이전 버전

  • (lukemelia에 의해 제안) 데이터가로드 될 때까지 기다리고, 동시 상태 (SinisterMinister)
  • 일시 정지 상태 전이 중류 수 있습니다

    • 사용 SproutCore를의 상태 차트, 것 같다 당신 비동기로 표시 전환을 사용할 수 있지만 제거되었습니다.

    톰이 주에 대해 말한 것을 감안할 때 가능한 한이 상황을 피하려고합니다. 경로를 '보호'하려고하는 대신 처음부터 유효하지 않은 상태에 도달 할 수 없도록 여러 경로 + 주를 조합하여 사용하십시오.

    • '/ 청구'에서 하나의 "라우팅"상태가
    • 2 '하위 상태가 "'방법 '과'주소 '라는 이름 (이러한 Ember.State을 대신 확장해야하는 예제에서는 변경할 것 Ember.Router 및 '어드레스'
    • router.send ('billingAddressUpdated') 될 경로) '/ 결제'경로
    • 초기 상태 (Initial)를 설정하지 않은 경우, 사용자의 행동 또는 비동기 데이터 중 하나를 통해 변경 BillingAddressModel (로드)
    • 'method'와 'address'사이의 billingAddressUpdated 이벤트 전환이 적절하게 적용됩니다.

    BTW 경로가없는 하위 상태가 최근 커밋까지 중단되었으므로이 접근 방식에 HEAD ember를 사용해야합니다.

    다른 사람들이이 문제에 접근하는 방법을 배우는 것은 매우 궁금합니다. 희망이 도움이됩니다.

  • 관련 문제