我有一个简单的重写课程。看起来像这样:
Ext.define('Ext.overrides.form.Panel',{
override: 'Ext.form.Panel',
constructor: function() {
this.callParent(arguments);
},
listeners: {
afterrender: {
fn:function (component, eOpts) {
var fields = component.getForm().getFields();
var field = fields.getAt(0);
if(typeof field !== 'undefined' && field.isFocusable()) {
//need to wait before you can focus a field.
Ext.defer(function() {
field.focus(true,200);
},1);
}
}
}
}
});
正如您所看到的,我试图覆盖afterRender事件,以便在表单呈现后表单中的第一个字段将具有焦点。 这是有效的,除了我的应用程序中的一些表单,它们在afterrender事件中为自己实现一些代码。它们似乎超越了我上面定义的这种方法。
我可以将这段代码复制到这些表单中,但如果我可以使用类似this.callParent(arguments)之类的东西调用上面的代码,那就更好了。在那些形式? 我实际上已经尝试过了,但问题是我对这些表单的渲染后代码是在视图控制器范围内。因此'this'引用将具有错误的Ext.Base范围。
答案 0 :(得分:1)
这应该有效:
Ext.define('Ext.overrides.form.Panel',{
override: 'Ext.form.Panel',
constructor: function() {
this.callParent(arguments);
this.on({
afterrender: function (component, eOpts) {
var fields = component.getForm().getFields();
var field = fields.getAt(0);
if(typeof field !== 'undefined' && field.isFocusable()) {
//need to wait before you can focus a field.
Ext.defer(function() {
field.focus(true,200);
},1);
}
}
});
}
});