2016-06-06 2 views
0

URL 문자열에서 경로 이름을 결정해야합니다.URL에서 Ember 경로 이름을 확인하는 방법은 무엇입니까?

이것은 일반적으로 라우터가 내부적으로 수행하는 작업이지만 {여기에 긴 이야기 삽입} 때문에 수동으로해야합니다. API에서 'gallery/123'처럼 보이는 데이터를 받았으며 경로 이름이 'gallery.post'인지 알아야합니다. 내가 할 수 있도록 route.replaceWith(determinedRouteName);

  • 은 'stuff.post.comments'
  • 에 '갤러리/123' 'gallery.post'
  • 하는 설정 필요 '물건/99/코멘트'로 전환 필요 기타

답변

-1

경로에 ID가 하나만 있습니까? 아니면 첫 번째 ID는 항상 최소한 "게시"ID일까요? 그렇다면 Ember 문제가 아닙니다. API 데이터가 항상 동일한 형식으로 반환된다고 가정하면 동일한 형식을 항상 따르는 자바 스크립트 찾기/바꾸기 일 것입니다. API를 가정

항상이 형식을 제공 :

"뭔가/: POST_ID/optionally_something_else"

당신은 API가 제공하는 문자열을 취할 수 및 방법을 대체 몇 가지를 통해 실행

var apiString = "stuff/99/comments"; 

apiString = apiString.replace(/[0-9]+/, "post").replace(/\//g, "."); // => "stuff.post.comments" 

// Also works with: 

var apiString = "gallery/123"; 

apiString = apiString.replace(/[0-9]+/, "post").replace(/\//g, "."); // => "gallery.post" 

면책 조항 : 이것은 매우 까다 롭고 문자열이이 형식을 따르지 않으면 중단됩니다. 또한 첫 번째 자릿수 집합을 "게시"로만 변환합니다. 하지만 평소처럼 다음과 같이해야합니다. P

0

Ember는 내부적으로 router-recognizer micro lib에 의존합니다. 나는 최선의 선택은 그것을 사용하는 것이라고 생각한다.

라우터 인스턴스에 액세스하려면 현재 개인 -routing 서비스에 의존해야합니다. (참고 : 여기 공용 라우터 서비스를 제공하는 것에 대해서는 pending RFC입니다).

이 개인 서비스를 주입 :

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    router: Ember.inject.service('-routing'), 

    ... 
}); 

recognize 기능을 사용하면 전체 문자열 또는 아무것도를 구축하려는 경우에 가입 할 수있는 모든 처리기의 목록을 반환합니다.

예 :

this.router.recognize("stuffs/99/comments"); 
> [{handler: "application", ...}, 
    handler: "stuffs", ...}, 
    handler: "stuff", ...}, 
    handler: "comments", ...}, 
    handler: "comments.index, ...}] 

희망이 도움
관련 문제