2013-08-29 27 views
5

Gần đây, Ember.js was updated so that action event handlers are defined in an actions object trên tuyến đường/bộ điều khiển/lượt xem. Kết quả là, các trình xử lý sự kiện không còn là các phương thức bình thường trên nguyên mẫu nữa.Gọi `super` từ trình xử lý sự kiện trên bộ điều khiển Ember

Nếu bạn phân lớp bộ điều khiển (ví dụ) sử dụng extend, bạn vẫn có thể ghi đè và sau đó gọi trình xử lý của lớp cha?

Chỉ cần gọi _super không hoạt động:

FormController = Em.ObjectController.extend({ 
    actions: { 
     submit: function() { this.get('model').save(); } 
    } 
}); 

SpecialFormController = FormController.extend({ 
    actions: { 
     submit: function() { 
      this.set('special', true); 
      this._super(); // doesn't work 
     } 
    } 
}); 

Trả lời

4

Ember làm cho nó có thể làm những gì bạn đang cố gắng làm. Đây là một JSFiddle đó chứng tỏ cách làm việc này:

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

App.BaseController = Em.ArrayController.extend({ 
    actions: { 
    nameAlert: function(person){ 
     window.alert('alert from BaseController: ' + person.lastName + ', ' + person.firstName); 
    } 
    } 
}); 

App.IndexController = App.BaseController.extend({ 
    actions: { 
    nameAlert: function(person){ 
     this._super(person); 
     window.alert('alert from IndexController: ' + person.lastName + ', ' + person.firstName); 
    } 
    } 
}); 

Khi Ember đang tạo ra một đối tượng, nó đặc biệt kết thúc tốt đẹp các chức năng này để họ có _super sẵn cho họ.

Nếu bạn muốn chia sẻ thêm về triển khai của mình, tôi có thể cố gắng tìm hiểu lý do tại sao mã của bạn không hoạt động theo cách minh họa của JSFiddle.

Các vấn đề liên quan