如何从ExtJS数据存储区获取脏记录? [英] How do I get the dirty records from an ExtJS data store?

查看:145
本文介绍了如何从ExtJS数据存储区获取脏记录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

除了重复商店中的记录和检查脏标记之外,是否有更干净的方法?

Other than iterating over the records in the store and checking the dirty flag, is there a cleaner way?

编辑

我正在使用ExtJS4,btw。

I am using ExtJS4, btw.

这是一个返回的数据片段。注意,有一个 dirty:true 修改的对象集(实际上是OLD数据和 data object包含新数据)

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

注意 data block包含一个 incidentCount 为14.这是值和修改块包含 OLD 值为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加载商店:

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

在此之后,上述存储已成功加载3行。然后,当我更改一个值时,脏标志被设置,你得到上面的数据块

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

谢谢

编辑3

这是我要使用的代码,除非有更好的方法。我不明白为什么 getUpdatedRecords()返回一个空数组。 (c = 0; c< TEDetailIncidencesStore.count(); c ++){


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


推荐答案

诀窍是商店读者需要指定一个idProperty或所有行被认为是新的。这是为我工作的结构:

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

如果您可以获得一个网格来显示脏元素,那么store.getUpdatedRecords()将会> 0.我看到一个意见,认为这只适用于一个json读者,但我不明白为什么它不适用于其他数据结构。

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.

这篇关于如何从ExtJS数据存储区获取脏记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆