Other than iterating over the records in the store and checking the dirty flag, is there a cleaner way?
EDIT
I am using ExtJS4, btw.
Here is a snippet of the data returned. Notice there is a dirty: true with the modified object set (which is actually the OLD data and the data object contains the NEW data)
data: Ext.Class.Class.newClass
items: Array[3]
0: Ext.Class.Class.newClass
data: Object
incidentCount: 14
incidentKey: "5466BD05-E4DD-4C1F-9F73-61ABAC6D3753"
dirty: true
id: "Ext.data.Store.ImplicitModel-TEDetailIncidencesStore-ext-record-13"
index: 0
internalId: "ext-record-13"
modified: Object
incidentCount: 7
Notice the data block contains an incidentCount of 14. That is the NEW value and the modified block contains the OLD value of 7.
EDIT 2
I load the store with:
TimeEntryDetailsStore.load({
params:{
timeEntryKey:"myKey"
}
});
After this fires, the above store is successfully loaded with 3 rows. Then, when I change a value, the dirty flag is set and you get the above block of data
Thanks
EDIT 3
This is the code I am going to use unless someone has a better way. I don’t understand why the getUpdatedRecords() returns an empty array. But oh well.
for(c=0; c < TEDetailIncidencesStore.count(); c++ ) {
if( TEDetailIncidencesStore.data.items[c]["dirty"] == true) {
var dirtyRecord = TEDetailIncidencesStore.data.items[c];
updateTEDetailIncidences(dirtyRecord);
}
}
The trick is that the store reader needs to designate a idProperty or all rows are considered new. Here’s the construct that is working for me:
If you can get a grid to show ‘dirty’ elements, then store.getUpdatedRecords().length will be > 0. I saw one comment that suggested this would only work with a json reader, but I don’t see why it wouldn’t work for other data structures as well.