我有一个想重新打开的基本控制器,所以我可以覆盖'needs'参数,但是,新参数会添加到'needs'参数中。
例如,我原来的控制器看起来像这样:
App.MessagesController = Ember.ArrayController.extend({
needs: ['blog', 'services', 'post_edit']
});
我的构建过程在另一个应用程序中包含此控制器文件,并且为避免代码冗余,我希望能够重新打开控制器并根据需要对其进行一些小的更改,包括“ needs”参数。像这样:
App.MessagesController.reopen({
needs: ['post', 'services']
});
问题在于,当运行此代码时,'needs'参数不会被覆盖-它是扩展的。它实质上变成: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
在重新打开中将另一个伪造的控制器项添加到“需要”参数中会添加到此错误消息。
您可能希望将应用程序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,{
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句