干杯!我有两个控制器,我希望能够从takenSeatsNumbers
访问TravelClient.TourController
。
TravelClient.TourController = Ember.ObjectController.extend({
needs: ['tour.seats']
});
TravelClient.TourSeatsController = Ember.ObjectController.extend({
takenSeatsNumbers: []
});
我是否以正确的方式使用needs
?如何从takenSeatsNumbers
模板获取tour
?
答案 0 :(得分:1)
如上所述,这是一个current bug,所以上面的看似工作,但实际上并没有像jsFiddle所说的那样在现实中工作。目前的解决方案是通过路由中的this.controllerFor
传递控制器的实例。它远非理想,但现在就足够了。
这是因为Ember是指使用 dot.notation 的控制器,而如果使用 camelCase 或* under_scores *则会创建不同的实例。
解决方案是从您的路线注入控制器,如下所示:
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}}
。
答案 1 :(得分:0)
此代码基于ember-pre4。来自另一个控制器的属性的代理似乎是这种方式的模式,并且可能在mixin的帮助下被推广:
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: []
});