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
但是,因为引用的控制器名称是基于传入的参数字符串,所以需要动态完成。有人曾经这样做过吗?
答案 0 :(得分:1)
在needs
数组中包含所有潜在的控制器会不会有问题?如果只有少数几个,您可以将它们全部添加到needs
并访问运行时所需的任何一个。我不确定您是否可以动态地将项目添加到needs
,因为我相信在控制器初始化时必须存在完整的数组。
答案 1 :(得分:0)
您可以动态添加到needs
:
this.get('needs').pushObject(this.get('referrer'));
然后你可以使用新控制器的模型:
this.get('controllers.' + this.get('referrer') + '.model');
您可能必须明智地不向needs
添加重复项。