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

如何从ExtJS数据存储中获取脏记录?,extjs,extjs4,Extjs,Extjs4,除了迭代存储中的记录并检查脏标志外,还有更干净的方法吗 编辑 顺便说一句,我正在使用ExtJS4 下面是返回的数据片段。请注意,有一个dirty:true和modified对象集(实际上是旧数据,data对象包含新数据) 请注意,data块包含一个14的incidentCount。这是新的值,修改的块包含旧的值7 编辑2 我用以下内容加载存储: TimeEntryDetailsStore.load({ params:{ timeEntryKey:"myKey"

除了迭代存储中的记录并检查脏标志外,还有更干净的方法吗

编辑

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

下面是返回的数据片段。请注意,有一个
dirty:true
modified
对象集(实际上是旧数据,
data
对象包含新数据)

请注意,
data
块包含一个14的
incidentCount
。这是新的值,
修改的
块包含旧的值7

编辑2

我用以下内容加载存储:

TimeEntryDetailsStore.load({
     params:{
        timeEntryKey:"myKey"
     }
});
触发后,上述存储成功加载了3行。然后,当我更改一个值时,设置了dirty标志,就得到了上面的数据块

谢谢

编辑3

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

for(c=0; c < TEDetailIncidencesStore.count(); c++ ) {
    if( TEDetailIncidencesStore.data.items[c]["dirty"] == true) {
        var dirtyRecord = TEDetailIncidencesStore.data.items[c];
        updateTEDetailIncidences(dirtyRecord);
    }
}
<代码>(C=0;C++ < Tebug) if(TedeTailCidencesStore.data.items[c][“dirty”]==true){ var dirtyRecord=TEDETAILINCIDESSTORE.data.items[c]; UpdateDetailIncidences(目录记录); } }
商店上的getModifiedRecords()方法如何?这应该可以满足您的需要。

store.getUpdatedRecords()
或ExtJs3中的
store.getModifiedRecords()
诀窍是存储读取器需要指定一个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.getUpdateRecords()的长度将大于0。我看到一条评论说,这只适用于json读取器,但我不明白为什么它不适用于其他数据结构。

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

请参阅下面的url:


我看到了,并尝试了它,但它返回了一个空数组。即使这些项目显然有“dirty:true”条目。事实上,我甚至可以看到红色三角形。嗯,现在我只是在控制台中工作。数据存储正确加载。我将更新存储数据的一个片段。我使用的是4版,您可以发布代码的soem,而不是控制台中显示的内容,
store.getNewRecords()
返回所有三条记录。脏和非脏??那么
TimeEntryDetailsStore.getUpdatedRecords()返回什么?只是一个空数组。我真的需要查看你的网格和存储的代码来进一步研究这个问题。是的,它返回一个空数组,这就是我所有的代码。我只是用一些测试数据在Ext.ready上加载存储。存储绑定到
Ext.grid.Panel
。感谢您,您还可以在模型上设置
idProperty
,使其保持在一个位置。IMHO这应该是模型定义的一部分,因为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'
        }
    }
});