Можно создать модельку для формы. Перед созданием формы загрузить в неё пустую запись. При отправке формы вытащить запись, изменить 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);
}
}
});
}
});