0

干杯! 我有两个控制器,我想访问takenSeatsNumbersfrom TravelClient.TourController

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

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

我是否needs以正确的方式使用?以及如何takenSeatsNumberstour模板中获取?

4

2 回答 2

1

正如上面提到的,这是一个当前的错误,所以上面的方法看似有效,但实际上并不有效,正如 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}}.

于 2013-02-19T10:21:29.103 回答
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: []
});
于 2013-02-19T10:07:26.737 回答