2014-01-28 3 views
3

에버 루트 클래스에서 serialize 후크를 사용하는 것은 무엇입니까?에버 루트에서 시리얼 라이즈 후크 사용

 App.PostRoute = Ember.Route.extend({ 
     model: function(params) { 
      return this.store.find('post', params.post_id); 
     }, 

     serialize: function(post) { 
      return { post_id: post.get('id') }; 
     } 
    }); 

엠버 문서는 말한다 : 동적 세그먼트가 _id로 끝나는 경우

, 기본 모델 후크 응용 프로그램의 네임 스페이스에 모델 클래스에 첫 번째 부분을 변환합니다 (게시물 App.Post된다). 그런 다음 동적 세그먼트 값을 사용하여 해당 클래스에서 find를 호출합니다. 기본 serialize 훅은 모델 오브젝트의 id 특성으로 동적 세그먼트를 가져옵니다.

는하지만 난 경로 클래스

답변

7

직렬화 방법은 제공 기관에 대한 매개 변수로를 사용할지 결정에 직렬화 후크의 사용을 이해할 수 없습니다입니다.

예.

다음과 같은 사용자 모델이 있으며 다음과 같은 속성이 있다고 가정 해 보겠습니다.

id 
username 
email 

이제 사용자 목록이 있고 쇼 사용자 세부 정보 페이지에 연결하려는 경우 이와 같은 루프를 사용할 수 있습니다. 엠버이 볼 때

{{#each users}} 
    {{#link-to user.show this }} {{username}} {{/link-to}} 
{{/each}} 

그래서 링크를-, 나는 지금 여기에 기본 동작은 매개 변수로 ID를 사용하는 것입니다이

<a href="/user/1">elvar</a> 

처럼 보일 수있는 링크로 변환됩니다 도우미 이것은 당신의 예제가 보여주는 것입니다, 나는 모델로부터 ID를 선택합니다. 우리는 이것을 serializer 방식으로 변경할 수 있습니다.

id를 사용하는 대신 사용자 이름을 매개 변수로 사용하려고합니다.

App.UserShowRoute= Ember.Route.extend({ 
    model: function(params) { 
     return this.store.find('user', params.user); 
    }, 

    serialize: function(user) { 
     return { user: user.get('username') }; 
    } 
}); 

이제 링크 대상 도우미는 대신 다음을 생성합니다.

<a href="/user/elvar">elvar</a> 
+0

나는 동의합니다. 그러나 UserShowRoute에서 serialize 후크를 제거하면 여전히 작동합니다. 그렇다면 왜 우리는 라우트 클래스에서 그 직렬화 후크가 필요한가? – Dhakchianandan

+1

그렇지 않습니다. 모델 ID는 기본적으로 사용됩니다. 당신이 원한다면, 그것을 구현할 필요가 있습니다. 예를 들어, 종종 슬프게도 나를 위해 유스 케이스입니다. – MartinElvar

+0

"각"루프가 별도의 사용자 경로에 있습니까? 따라서 사용자 경로 (링크하려는 위치)가 아닌 사용자 경로 (연결하려는 경로)에 대해서만 직렬화하면됩니다. – ahnbizcad

관련 문제