javascript – 从Ember控制器上的事件处理程序调用`super`

前端之家收集整理的这篇文章主要介绍了javascript – 从Ember控制器上的事件处理程序调用`super`前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近,路线/控制器/视图上的Ember.js was updated so that action event handlers are defined in an actions object.因此,事件处理程序不再是原型上的常规方法.

如果使用extend继承(例如)控制器,是否仍然可以覆盖然后调用超类的处理程序?

只是调用_super不起作用:

  1. FormController = Em.ObjectController.extend({
  2. actions: {
  3. submit: function() { this.get('model').save(); }
  4. }
  5. });
  6. SpecialFormController = FormController.extend({
  7. actions: {
  8. submit: function() {
  9. this.set('special',true);
  10. this._super(); // doesn't work
  11. }
  12. }
  13. });
最佳答案
Ember让你可以做你想做的事.这是一个JSFiddle,演示了它是如何工作的:

http://jsfiddle.net/HzjUG/1/

  1. App.BaseController = Em.ArrayController.extend({
  2. actions: {
  3. nameAlert: function(person){
  4. window.alert('alert from BaseController: ' + person.lastName + ',' + person.firstName);
  5. }
  6. }
  7. });
  8. App.IndexController = App.BaseController.extend({
  9. actions: {
  10. nameAlert: function(person){
  11. this._super(person);
  12. window.alert('alert from IndexController: ' + person.lastName + ',' + person.firstName);
  13. }
  14. }
  15. });

当Ember创建一个对象时,它会专门包装这些函数,以便它们可以使用_super.

如果您想分享更多的实现,我可以尝试帮助弄清楚为什么您的代码不像JSFiddle演示那样表现.

猜你在找的JavaScript相关文章