New Router API에서 경로와 리소스의 차이점은 무엇입니까?


114

나는 a Route와 a 의 차이점을 이해하려고 노력 하고 있습니다 Resource. 내가 이해 Resource하는 방식 은 Route개체 의 하위 경로 를 다른 Route개체 로 설정 하는 데 도움이됩니다 . 그러나 경로에 대해 발생하는 기본 이름 매핑을 생각할 때 명확하지 않습니다.

답변:


101

이후 1.11.0에서, 있습니다 this.route만 대신 사용됩니다 this.resource. 출처 : http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

자세한 설명 은이 게시물 을 참조하십시오.

다음은이 게시물의 대략적인 요약입니다 (약간 수정했습니다).

리소스와 경로가 변경된 이후로 많은 사람들이 두 가지의 의미와 이름 지정에 미치는 영향에 대해 혼란스러워합니다. 차이점은 다음과 같습니다.

  • 자원-사물 (모델)
  • 경로-사물과 관련이있는 것

따라서 이것은 경로와 리소스를 사용하는 라우터가 다음과 같을 수 있음을 의미합니다.

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
  });
  this.route("another", { path: "/another" });
});

이로 인해 다음 경로가 생성 / 사용됩니다.

  • PostsRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostsNewRoute, PostsNewController, PostsNewView
  • AnotherRoute, AnotherController, AnotherView

이 예에서 볼 수 있듯이 리소스는 사용 / 생성되는 컨트롤러, 경로 및보기의 이름에 영향을줍니다 ( "새"경로는 "게시"리소스에 종속 된 것으로 처리됨). 원본 출처에서 인용 (Patrick M이 댓글에서 올바르게 지적 했으므로 짜증이 났기 때문에 수정했습니다) :

즉, 리소스를 만들 때마다 완전히 새로운 네임 스페이스가 만들어집니다. 해당 네임 스페이스는 리소스의 이름을 따서 명명되며 모든 하위 경로가 여기에 삽입됩니다.

업데이트 : 중첩 된 리소스가있는 더 복잡한 예제

다중 중첩 리소스가있는 다음과 같은 더 복잡한 예를 고려하십시오.

App.Router.map(function() {
  this.resource("posts", { path: "/" }, function() {
    this.route("new", { path: "/new" });
    this.resource("comments", { path: "/comments" }, function() {
      this.route("new", { path: "/new" });
    });
  });
  this.route("another", { path: "/another" });
});

이 경우 리소스 comments는 새로운 네임 스페이스를 만듭니다. 이는이 경우 결과 경로가 다음과 같음을 의미합니다. 보시다시피 주석 리소스의 경로, 컨트롤러 및보기에는 상위 경로의 이름이 접두사로 붙지 않습니다. 즉, 리소스를 다른 리소스 내에 중첩하면 네임 스페이스가 재설정됩니다 (= 새 네임 스페이스 생성).

  • PostsRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostsNewRoute, PostsNewController, PostsNewView
  • CommentsRoute, CommentsController, CommentsView
  • CommentsNewRoute, CommentsNewController, CommentsNewView
  • AnotherRoute, AnotherController, AnotherView

이 동작은 Ember 문서 에도 설명되어 있습니다.


4
이것은 Ember 가이드에서 더 명확해야합니다. 처음에는이 개념에 확실히 혼란 스러웠습니다.
가브리엘 G. 로이

훌륭한 게시물의 훌륭한 요약. 그러나 마지막으로 포함시킨 인용문은 의미가 없습니다 That namespace will have an " which [...]. 무슨 "뜻입니까? Route | 컨트롤러 | 전망?
Patrick M

패트릭, 지적 해 주셔서 감사합니다. 더 이상 단서를 만들 수 없었습니다. 따라서 중첩 리소스로 더 복잡한 예제를 추가했습니다. 나는이 인용이이 시나리오를 언급했다고 생각한다.
mavilein 2014 년

그것은 훨씬 더 명확합니다. 추가 예, 마 빌레 인 감사합니다.
Patrick M

당신의 예와 이것의 차이점 (있는 경우)에 대해 자세히 설명해 주 App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });
Timo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.