如何从ExtJS数据存储中获取脏记录?

时间:2011-06-09 14:38:19

标签: extjs extjs4

除了遍历商店中的记录并检查脏标志外,还有更简洁的方法吗?

修改

我正在使用ExtJS4,顺便说一句。

以下是返回数据的片段。请注意,dirty: true对象设置为modified(实际上是OLD数据,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

请注意,data块包含incidentCount为14.这是值,modified块包含 OLD 价值7。

编辑2

我用以下商店加载商店:

TimeEntryDetailsStore.load({
     params:{
        timeEntryKey:"myKey"
     }
});

在此触发后,上面的商店成功加载了3行。然后,当我更改一个值时,脏标志被设置,你得到上面的数据块

由于

编辑3

这是我要使用的代码,除非有人有更好的方法。我不明白为什么getUpdatedRecords()返回一个空数组。但是哦,好吧。

for(c=0; c < TEDetailIncidencesStore.count(); c++ ) {
    if( TEDetailIncidencesStore.data.items[c]["dirty"] == true) {
        var dirtyRecord = TEDetailIncidencesStore.data.items[c];
        updateTEDetailIncidences(dirtyRecord);
    }
}

4 个答案:

答案 0 :(得分:8)

技巧是商店读者需要指定一个idProperty或所有行都被认为是新的。这是适合我的构造:

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

如果你可以得到一个网格来显示'脏'元素,那么store.getUpdatedRecords()。length将是&gt; 0.我看到一条评论表明这只适用于json阅读器,但我不明白为什么它也不适用于其他数据结构。

答案 1 :(得分:6)

ExtJs 4中的

store.getUpdatedRecords()或ExtJs3中的store.getModifiedRecords()

答案 2 :(得分:3)

商店中的getModifiedRecords()方法怎么样?这应该可以满足您的需求。

答案 3 :(得分:0)

这是因为模型字段的指定验证。

请参阅以下网址:

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