Показать сообщение отдельно
  #7 (permalink)  
Старый 25.10.2016, 09:58
Аспирант
Отправить личное сообщение для XAPuTOH Посмотреть профиль Найти все сообщения от XAPuTOH
 
Регистрация: 17.12.2012
Сообщений: 63

Такая базовая форма:
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.

По поводу обновления.
Я обычно обновляю весь стор после обновления записи. Ну или конкретную ветку если это дерево.
Ответить с цитированием