gpt4 book ai didi

javascript - 从 Ember Controller 上的事件处理程序调用 `super`

转载 作者:搜寻专家 更新时间:2023-11-01 04:18:10 24 4
gpt4 key购买 nike

最近,Ember.js was updated so that action event handlers are defined in an actions object在路线/ Controller / View 上。因此,事件处理程序不再是原型(prototype)上的普通方法。

如果您使用 extend 对(例如) Controller 进行子类化,是否仍然可以覆盖然后调用父类(super class)的处理程序?

仅仅调用 _super 是行不通的:

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
}
}
});

最佳答案

Ember 使您可以做您想做的事。这是一个 JSFiddle,它演示了它是如何工作的:

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);
}
}
});

当 Ember 创建对象时,它会特别包装这些​​函数,以便它们可以使用 _super。

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

关于javascript - 从 Ember Controller 上的事件处理程序调用 `super`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com