Такая базовая форма:
Ext.define('common.helpers.BaseForm', {
extend: 'Ext.form.Panel',
alias: 'helpers.baseform',
controller:{
type:'helpers.baseformcontroller'
},
modal:true,
frame: true,
closable:true,
floating:true,
reference: 'form',
buttons: [
{
formBind: true,
disabled: true,
text:'Сохранить',
handler:'save'
},
{
text: 'Отменить',
handler: function(){
this.up('form').close();
}
}
]
});
Её контроллер:
Ext.define('KSoft.common.helpers.BaseFormController', {
extend: 'Ext.app.ViewController',
alias: 'controller.ksoft.helpers.baseformcontroller',
save:function(){
var me = this,
form = this.view,
record = form.getRecord();
if (form.isValid()) {
form.updateRecord(record);
if(form.extraParams != undefined)
record.proxy.setExtraParams(form.extraParams);
record.save({
success: function(record, operation) {
form.fireEvent('save', form); //--- Тут вызываем событие о том что запись успешно сохранена
form.close();
},
failure: function(record, operation) {
//Тут обрабатываем ошибку сохранения.
}
});
} else {
Ext.Msg.alert('Некорректные данные', 'Введите корректные данные');
}
}
});
Вот пример формы:
Ext.define('view.objects.ObjectForm', {
extend: 'view.helpers.BaseForm',
alias: 'objectform',
title:'Объект',
items: [
{
xtype: 'textfield',
fieldLabel: 'Name',
name: 'Name'
}
{
xtype: 'textfield',
fieldLabel: 'Code',
name: 'Code'
},
{
xtype: 'textfield',
fieldLabel: 'Icon Cls',
name: 'iconCls'
},
{
xtype: 'textfield',
fieldLabel: 'Long Name',
name: 'LongName'
},
{
xtype: 'textfield',
fieldLabel: 'Short Name',
name: 'ShortName'
},
{
xtype: 'numberfield',
fieldLabel: 'Number Name',
name: 'IntName'
},
{
xtype: 'checkboxfield',
fieldLabel: 'isActive',
name: 'Active',
checked: true,
uncheckedValue: false
},
{
xtype: 'hiddenfield',
name: 'ObjId'
}
]
});
Использую так: Например есть дерево объектов в котором можно добавлять или изменять объекты. Делается это при вызове соответствующих методов контроллера. В которых я уже вызываю непосредственно форму:
var form = new view.objects.ObjectForm;
form.loadRecord(object);
form.on('save',this.formSave, this);
form.show();
После сохранения формы я обновляю соответствующую ветку дерева.
Кстати форма получилась универсальной. Например у меня есть грид в качестве модели которого модель из формы выше. Так я из него вызываю данную форму и меняю свойства модели и т.п.
Окно поверх вьюпорта. так как создается с помощью new.
По поводу обновления.
Я обычно обновляю весь стор после обновления записи. Ну или конкретную ветку если это дерево.