动态控制器包含在Ember中

时间:2014-12-18 16:56:37

标签: ember.js

App.ListingController = Ember.ObjectController.extend({
  queryParams: ['referrer'],
  referrer: null,

  listings: function(){
    return this.controllerFor(this.get('referrer')).get('model.content');
  }.property('referrer')
});

以上代码有效,但提供了弃用警告:

DEPRECATION: Controller#controllerFor is deprecated, please use Controller#needs instead

但是,因为引用的控制器名称是基于传入的参数字符串,所以需要动态完成。有人曾经这样做过吗?

2 个答案:

答案 0 :(得分:1)

needs数组中包含所有潜在的控制器会不会有问题?如果只有少数几个,您可以将它们全部添加到needs并访问运行时所需的任何一个。我不确定您是否可以动态地将项目添加到needs,因为我相信在控制器初始化时必须存在完整的数组。

答案 1 :(得分:0)

您可以动态添加到needs

this.get('needs').pushObject(this.get('referrer'));

然后你可以使用新控制器的模型:

this.get('controllers.' + this.get('referrer') + '.model');

您可能必须明智地不向needs添加重复项。