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