I'm using a grid with Ext.grid.plugin.CellEditing. On the grid, there's a combobox and a date. The date is syncing correctly, but the combobox is trying to save the id of the combobox in a String description field.
My combobox has fields codeChecklistItemStatusId (foreign key), and codeChecklistItemStatus (display field for user).
When I edit the Checklist Item Status field, the field I've chosen for display field (dataIndex: 'codeChecklistItemStatus') is updated to be an integer. Upon saving, the field codeChecklistItemStatus gets changed from a String description to the new id value, and the field I want to change codeChecklistItemStatusId still has the original id value.
All the examples I've found online have a string value being saved instead of an id value. Is there any way to change the codeChecklistItemStatusId field instead of codeChecklistItemStatus?
I've put dataIndex: 'codeChecklistItemStatusId' in my grid and the grid then displays numbers to the user instead of a description. However, when saving the correct field codeChecklistItemStatusId is updated correctly.
The ChecklistItem store:
Ext.define('gui.store.IspIntakeChecklistItem',
{
extend: 'Ext.data.Store',
model: 'gui.model.IspIntakeChecklistItem',
root: 'data',
proxy:
{
type: 'ajax',
api:
{
read: 'ispIntakeChecklistItem/search',
update: 'ispIntakeChecklistItem/quickEdit'
},
actionMethods:
{
read: 'POST'
},
reader:
{
type: 'json',
rootProperty: 'data'
},
writer:
{
type: 'json',
allowSingle: false,
writeAllFields: true
}
}
});
The CheckListItem model:
Ext.define('gui.model.IspIntakeChecklistItem',
{
extend: 'Ext.data.Model',
fields: [
{
name: 'id'
},
{
name: 'codeChecklistItemStatusId'
},
{
name: 'codeChecklistItemStatus'
},
{
name: 'followUpDate'
}
]
});
The store of the combobox:
Ext.define('gui.store.maint.CodeChecklistItemStatus',
{
extend: 'Ext.data.Store',
remoteSort: true,
pageSize: gui.data.Constants.MAX_CODE_RESULTS_IN_GRID,
model: 'gui.model.maint.CodeChecklistItemStatus',
root: 'data',
autoLoad: true,
proxy:
{
type: 'ajax',
api:
{
read: 'codeChecklistItemStatus/search',
update: 'codeChecklistItemStatus/updateSortOrder'
},
actionMethods:
{
read: 'POST'
},
reader:
{
type: 'json',
rootProperty: 'data'
}
}
});
The model of the combobox:
Ext.define('gui.model.maint.CodeChecklistItem',
{
extend: 'Ext.data.Model',
fields: [
{
name: 'id'
},
{
name: 'activeFlag'
},
{
name: 'description'
},
{
name: 'sortOrder'
},
{
name: 'createDate'
},
{
name: 'createUser'
},
{
name: 'lastUpdDate'
},
{
name: 'lastUpdUser'
}
]
});
Here are a few of the fields in the grid that has CellEditing enabled:
{
text: 'Checklist Item Status',
itemId: 'codeChecklistItemStatusGridFld',
dataIndex: 'codeChecklistItemStatus',
width: 200,
editor: {
xtype: 'combobox',
queryMode: 'local',
valueField: 'id',
displayField: 'description',
typeAhead: true,
forceSelection: true,
store: 'maint.CodeChecklistItemStatus',
allowBlank: false
},
tdCls: 'editableCell'
},
{
text: 'Follow Up Date',
dataIndex: 'followUpDate',
width: 150,
editor: {
xtype: 'datefield'
},
tdCls: 'editableCell'
}
My controller function:
quickEditChecklistItem: function(editor, e, eOpts) {
if (e.originalValue !== e.value) {
debugger;
var rec = e.record;
var store = this.getIspIntakeChecklistItemStore();
//store.add(rec);
store.sync({
scope: this,
success: function(batch, options) {
Ext.create('gui.widget.Notify').success('Checklist Item saved successfully');
},
failure: function(batch, options) {
Ext.create('gui.widget.Notify').failure('failure');
}
});
}
}