覆盖Ember控制器'需要'与重新开放

时间:2014-06-23 18:46:17

标签: ember.js

我有一个基本的控制器,我想重新打开,所以我可以超越“需要”#39;参数,但相反,新参数会增加“需求”。参数。

例如,我的原始控制器看起来像这样:

App.MessagesController = Ember.ArrayController.extend({
    needs: ['blog', 'services', 'post_edit']  
});

我有一个构建过程,在另一个应用程序中包含此控制器文件,为了避免代码冗余,我希望能够重新打开控制器并根据需要对其进行小的更改,包括&#39 ;需求'参数。像这样:

App.MessagesController.reopen({
    needs: ['post', 'services']  
});

问题在于,当运行此代码时,需要'参数未被覆盖 - 它已被扩展。它基本上变成:needs: ['blog', 'services', 'post_edit', 'post']

有没有办法超越'需要'重新打开控制器的参数?或者总有一种更好的方法?


为清晰起见编辑:

在控制器上执行查找会显示控制台错误,该错误会显示“需要”'参数未被覆盖。

$: App.__container__.lookup('controller:Messages');

Error: <App.MessagesController:ember322> needs [ controller:blog,    controller:post_edit ] but they could not be found

在“需要”中添加另一个假控制器项目&#39;重新打开参数会添加此错误消息。

1 个答案:

答案 0 :(得分:1)

您可能希望将app 1中的功能提取到mixin中,并将其包含在控制器中。然后在两个应用程序之间共享具有共享功能的基本控制器。

//Included in both apps
App.BaseMessagesController = Ember.ArrayController.extend({
  sharedValue:'foo'
});

//App 1
App.App1Mixin = Ember.Mixin.create({
    needs: ['blog', 'services', 'post_edit']  
});

App.MessagesController = Ember.BaseMessagesController.extend(App.App1Mixin,{

});