Показать сообщение отдельно
  #5 (permalink)  
Старый 15.06.2015, 17:21
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Можно создать модельку для формы. Перед созданием формы загрузить в неё пустую запись. При отправке формы вытащить запись, изменить id на нужный и сохранить запись на сервере. Тогда в форме параметр url не нужен. Нужна моделька с настроенным прокси. В прокси есть ещё параметр writer с методом transform.

Проход по минному полю выглядит тогда как-то так:

Ext.define('MyFruiteStore', {
    extend: 'Ext.data.Store',
    fields: [
        { name: 'id', type: 'int', allowNull: true },
        { name: 'fruit', type: 'string' }
    ],
    data: [
        { id: 1, fruit: 'apple' },
        { id: 2, fruit: 'orange' }
    ],
    listeners: {
        load: function(store) {
            store.insert(0, [{
                id: null,
                fruit: 'не указано'
            }]);
        }
    }
    
});
Ext.define('MyFormModel', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'fruit_id', type: 'int', allowNull: true }
    ],
    proxy: {
        type: 'ajax',
        url: '/form/submit.php',
        writer: {
            writeRecordId: false
        }
    }
});

    
Ext.application({
    name : 'Fiddle',

    launch : function() {
        
        var store = Ext.create('MyFruiteStore');
        
        Ext.create('Ext.form.Panel', {
            renderTo: Ext.getBody(),
            width: 300,
            items: [
                {
                    xtype: 'combobox',
                    anchor: '100%',
                    store: store,
                    editable: false,
                    displayField: 'fruit',
                    valueField: 'id',
                    allowBlank: false,
                    emptyText: 'не указано', 
                    name: 'fruit_id'
                }
            ],
            buttons: [
				{
                    text: 'Отправить',
                    handler: function() {
                        var form = this.up('form');
                        form.updateRecord();
                        var record = form.getRecord();
                        record.save();
                    }
                }
            ],
            listeners: {
                afterrender: function(form) {
                    var record = Ext.create('MyFormModel');
                    form.loadRecord(record);
                }
            }

        });
        
    }
});

Последний раз редактировалось novikov, 15.06.2015 в 18:56.
Ответить с цитированием