2013-01-23 2 views
1

Ember 라우팅 및 컨트롤러에 대한 질문이 있습니다. 새로운 라우터에 익숙해지기 위해 방금 작은 앱을 작성했습니다. 따라서 버튼을 클릭하여 다른 상태로 전환하는 버튼을 만들었습니다.ember 새 라우터

지금
App.PostsView = Em.View.extend({ 
    click: function() { 
    var router; 
    this.get('controller').transitionTo('about'); 
    } 
}); 

내 질문은 : get 방법 반환 무엇?. 분명히 PostController의 인스턴스이지만 컨트롤러에는 transitionTo() 메서드가없고 한편으로는 의미가 없습니다. 이 목표의에 그것은 기본적으로

답변

1

컨트롤러는 transitionTo 있습니다. Views는 "컨트롤러"속성을 가질 수 있으므로 this.get('controller')은보기의 컨트롤러 속성 (기본적으로 postsController)에 바인딩 된 컨트롤러를 반환합니다.

this.get('controller').transitionTo() 언급 한 바와 같이, transitionTo()도 컨트롤러에 정의되어 라우터에 위임되기 때문에 작동합니다. 참고로, 지원 중단 될 예정이므로 대신

this.get('controller').transitionToRoute('about'); 

을 사용해야합니다.

2

뷰 수준에서이 작업을 수행하면 안됩니다. 라우터에서 디자인 된 것이므로보기에서 클릭 이벤트를 캡처하는 대신 버튼에 작업을 구현하고 라우터에서 처리하도록하십시오. get-go에서 모범 사례를 배우는 것이 좋습니다. 트랜잭션 커밋/롤백 처리, 레코드 작성/업데이트 등과 같은보다 정교한 개념이 필요하므로 애플리케이션이 발전 할 가능성이 있습니다. 그래서 여기

App.FooRoute = App.Route.extend({ 
    events: { 
     onSaveClick: function() { 
      this.transitionTo('bar'); 
     } 
    } 
}) 

만약 다른 이유는, 스타일 또는 애니메이션을 말한다 라우터에서보기

<button type="button" {{action onSaveClick}} />Save</button> 

에서는

내 제안, 당신은 자신이 클릭 이벤트를 캡처하도록 강요 발견 뷰에서 이벤트를 캡처하고 스타일을 지정하고 마지막으로 컨트롤러에 이벤트를 보냅니다. 이벤트는 다음

App.FooView = Ember.View.extend({ 
click: function() { 
    // Do some styling 
    this.get('controller').send('onSaveClick') 
} 
}) 

마지막 모범 사례의 말하기 라우터에서 같은 방법으로 처리 할 수있는, 서로 상호 작용하는 일련의 상태로 응용 프로그램을 생각 타다 남은 작업을 할 때 배우려고. 컨셉 권한을 구현하려면 바운드을 찾으십시오. 살펴보기 this

+0

먼저 매우 빠르고 세부적인 도움에 감사드립니다. 난 그냥 엠버 사이트에서 설명서를 찾고 있었는데 거기에 'transitionTo'기능을 찾지 못했습니다. @ken 귀하의 조언을 주셔서 감사합니다. 어쨌든 이것은 새로운 라우터에 익숙해지기위한 작은 연습이었습니다. –

관련 문제