2015-01-06 4 views
0

그래서 내 엠버 앱에 /tournaments/setup/:tournament_id 경로가 있었고 모델의 다양한 필드가 표시되었습니다.모델을 변경하지 않고 템플릿에 동적 드롭 다운을 추가하는 방법은 무엇입니까?

하지만 다른 페이지가 필요합니다. 예를 들어, 모든 플레이어의 목록을 원한다고 가정하면 플레이어를 선택하여 토너먼트에 참가할 수있는 드롭 다운을 만들 수 있습니다.

나는 객체 전달할 수 있습니다

this.transitionTo('tournaments.setup', {tournament: tournament, players: players}); 

을하고 내가 상황의 변화를 반영하기 위해 핸들 템플릿을 변경하면 작동합니다.

하지만 이제 URL이 잘못되었습니다. URL은 /tournaments/setup/undefined입니다. 나는 분명히 이것을 처리하는 방법이있을 것이라고 확신하지만, 그것이 무엇인지는 모르겠다. ...

... 나는 길을 잃어 가고있는 것처럼 느껴진다. 내가하는 일을하는 더 보편적 인 방법이 있니?

업데이트 : 내가 URL이 id를 추가하여 작동시킬 수 있다는 것을 발견했습니다

this.transitionTo('tournaments.setup', {id: tournament.id, tournament: tournament, players: players}); 

하지만이 올바른 방법으로하고있어 경우에 나는 아직도 궁금하네요.

+0

토너먼트 개체 자체를 전달하고 엠버가 이드를 파악하도록하십시오. 'this.transitionTo ('tournaments.setup', tournament)' – kiwiupover

+0

그러면 플레이어 개체에 어떻게 접근 할 수 있습니까? 내가 그 페이지에서 더 많은 데이터를 필요로하기 전에 내가 그랬던 것이다. –

+0

URL의 오른쪽을 얻기 위해 라우트의 serialize 후크를 대체해야 할 수도 있습니다. http://emberjs.com/api/classes/Ember.Route.html#method_serialize – blessenm

답변

1

경로에서 모델을로드하고 제어기에 사용자에게 붙여 넣기 만하면됩니다. 보통 beforeModel 후크에서이 작업을 수행합니다. 지금까지이 경로를 입력 할 때 이제

App.TournamentSetupRoute = Ember.Route.extend({ 
    beforeModel: function() { 
     var self = this; 
     var players = this.store.find('player'); 
     players.then(function() { 
      self.controllerFor('players').set('model',players); 
     }); 
    } 
}); 

,의 players이 당신의 API에서 가져온되고 컨트롤러에 저장 : 그래서 App.TournamentsSetupRoute이 그런 짓을. 컨트롤러에서 players 컨트롤러를 needs에 추가하면 액세스 할 수 있습니다.

App.TournamentSetupController = Ember.ObjectController.extend({ 
    needs: ['players'] 
}); 

당신과 같이 템플릿에 걸쳐 this.get('controllers.players.model);를 수행하여 컨트롤러 어디서나 players 모델을 액세스하고 반복 할 수 있습니다

<select> 
    {{#each player in controllers.players.model}} 
     <option>{{player.name}}</option> 
    {{/each}} 
</select> 

희망! 위 코드를 테스트하지 않았으므로 오타가있을 수 있지만 나중에 도움이 될 것입니다.

+0

훨씬 깨끗한 접근 방식입니다. 감사합니다. –

관련 문제