2013-02-19 2 views
0

건배! 두 개의 컨트롤러가 있는데 TravelClient.TourController에서 takenSeatsNumbers에 액세스하고 싶습니다.Ember.js 컨트롤러간에 속성 전달

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tour.seats'] 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 

올바른 방법으로 needs을 사용합니까? 그리고 takenSeatsNumberstour 템플릿에서 가져 오는 방법은 무엇입니까?

답변

1

, 이것은 current bug이며, 따라서 위의 보이는 일 것이다 , jsFiddle이 보여 주듯이 현실에서는 작동하지 않습니다. 그 순간의 해결책은 경로의 this.controllerFor을 통해 컨트롤러의 인스턴스를 전달하는 것입니다. 그것은 이상과는 거리가 멀지 만 지금은 충분할 것입니다.

당신이 CamelCase를을 사용하거나 * under_scores은 * 다음은 당신에게 다른 인스턴스를 생성 할 경우 반면 엠버의 dot.notation를 사용하여 컨트롤러를 의미하기 때문에 발생합니다.

TravelClient.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
     var tourSeatsController = this.controllerFor('tour.seats'); 
     tourSeatsController.set('takenSeatsNumbers', [1,2,3]); 
     controller.set('tourSeatsController', tourSeatsController); 
    } 
}); 

그리고 당신은 당신의보기에서 사용할 수 있습니다 :

이 솔루션과 같이, 경로에서 컨트롤러를 주입하는 것입니다 {{tourSeatsController.takenSeatsNumbers.length}}.

+0

매우 도움이됩니다. 설명해 주셔서 감사합니다. – xamenrax

+0

또 하나의 가짜 질문 :'TourSeatsController' 컨텍스트의 모델이 변경되면 어떻게'takenSeatsNumbers'를 []로 설정할 수 있습니까? – xamenrax

+0

당신은'.clear()'을 가지고 있습니다. – Wildhoney

0

이 코드는 ember-pre4를 기반으로합니다. 다른 컨트롤러에서 속성의 프록시는이 방법으로 패턴으로 보인다 가능성이 믹스 인의 도움으로 일반화 될 수있다 : 위에서 언급 한 바와 같이

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tourSeats'], 
    someMethod : function(){ 
    var tourSeatsController = this.get("controllers.tourSeats"); 
    // do something with it 
    }, 
    takenSeatsNumbers : function(){ //proxy the property 
    return this.get("controllers.tourSeats.takenSeatsNumbers") 
    }.property("controllers.tourSeats.takenSeatsNumbers") 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 
+0

고마워요! rc.1의 기능을 사용하면'needs : [ 'tourSeats']' 과'tour' 템플릿 만 쓸 수 있습니다 :'{{controllers.TourSeats.takenSeatsNumbers}} ' – xamenrax

+1

'tourSeats '컨트롤러의 다른 인스턴스가 될 것입니다 : http://jsfiddle.net/CzyWM/ 아래에 임시 해결 방법을 게시했지만 1.0 : https://github.com/emberjs/ember로 수정 될 것으로 예상됩니다. js/issues/2025 – Wildhoney

+0

점 표기법에 문제가있을 수 있습니다. 사용하지 않으면 작동 할 것입니다. 이것은 당신을 기반으로 작동 fiddle입니다 : http://jsfiddle.net/mavilein/CzyWM/1/ – mavilein

관련 문제