How do I get the dirty records from an ExtJS data store?

一世执手 提交于 2019-12-10 04:19:27

问题


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);
    }
}

回答1:


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:

Ext.define('Sites', {
    extend: 'Ext.data.Model',
    fields: [
    {name: 'inCphr', type: 'boolean'},
    {name: 'department', type: 'string'},
    {name: 'commune', type: 'string'},
    {name: 'clinic', type: 'string'},
    {name: 'sitecode', type: 'int'},
    {name: 'dbsite', type: 'int'},
    {name: 'ipAddress', type: 'string'},
    {name: 'network', type: 'string'},
    {name: 'lastChanged', type: 'date'}
    ]
}); 
var store = Ext.create('Ext.data.Store', {
    model: 'Sites',
    proxy: {
        type: 'ajax',
        url : 'getHaitiSites.php?task=get',
        reader:{ 
            type:'json',
            root: 'results',
            idProperty: 'sitecode'
        }
    }
});

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.




回答2:


store.getUpdatedRecords() in ExtJs 4 or store.getModifiedRecords() in ExtJs3




回答3:


How about the getModifiedRecords() method on your store? That should give you what you need.




回答4:


This is because of the specified validations of model fields.

See the url below:

http://www.sencha.com/forum/showthread.php?141421-Ext.data.Store-getNewRecords%28%29-behaves-strange



来源:https://stackoverflow.com/questions/6294596/how-do-i-get-the-dirty-records-from-an-extjs-data-store

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!