Я только начал с ExtJS, так что, возможно, есть лучшие практики.
Вы можете назначить itemId для компонента и использовать ComponentQuery , чтобы получить его.
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
itemId: 'myId',
buttons: [{
text: 'Load',
handler: function(){
Ext.ComponentQuery.query('#myId').getForm().load({...});
}
}]
})
Другим вариантом является использование функции up () из AbstractComponent для получения закрывающей формы.
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
buttons: [{
text: 'Load',
handler: function(){
this.up('form').load({...});
}
}]
})
Обычно я не помещаю никакой код в определение представления, вместо этого я использую функцию control () в Ext.app.Controller для правильного разделения MVC:
Ext.define('app.controller.Contacts', {
extend: 'Ext.app.Controller',
views: ['app.view.contact.Form'],
init: function() {
this.control({
'button[action=load]': {
click: this.loadForm
}
})
}
loadFrom: function() {...}
})
Ext.define('app.view.contact.Form', {
extend: 'Ext.form.Panel',
buttons: [{
text: 'Load',
action: 'load'
}]
})
В этом небольшом примере это выглядит как некоторые издержки, но с большей кодовой базой функция управления очень удобна для понимания событий, отправляемых из комплексного представления в контроллер.