【问题标题】:How do I get the dirty records from an ExtJS data store?如何从 ExtJS 数据存储中获取脏记录?
【发布时间】:2014-03-04 03:50:34
【问题描述】:

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

编辑

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

这里是返回数据的sn-p。注意有一个dirty: truemodified 对象集(实际上是旧数据,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 块包含 14 的 incidentCount。这是 NEW 值,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);
    }
}

【问题讨论】:

  • 你可以发布你的代码而不是控制台中显示的内容
  • 顺便说一句,store.getNewRecords() 返回所有三个记录。既脏又不脏??
  • 那么TimeEntryDetailsStore.getUpdatedRecords() 会返回什么?只是一个空数组。我真的需要查看您的网格和商店的代码才能进一步研究。
  • 是的,它返回一个空数组
  • 这就是我拥有的所有代码。我只是用一些测试数据在 Ext.ready 上加载商店。商店绑定到Ext.grid.Panel。谢谢

标签: extjs extjs4


【解决方案1】:

诀窍是存储读取器需要指定一个 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 将 > 0。我看到一条评论建议这仅适用于 json 阅读器,但我没有看到为什么它也不适用于其他数据结构。

【讨论】:

  • 仅供参考,您还可以在模型上设置 idProperty 以将其全部保存在一个位置。恕我直言,这应该是模型定义的一部分,因为 idProperty 不应在您的应用程序中在可能使用相同模型的各个商店中更改。
【解决方案2】:

store.getUpdatedRecords() in ExtJs 4store.getModifiedRecords() 在 ExtJs3 中

【讨论】:

  • 我看到了,也试过了,但它返回一个空数组。即使这些项目显然有“dirty:true”条目。事实上,我什至可以看到红色的三角形。
  • 好吧,现在我只是在控制台中工作。数据存储正确加载。我将更新商店数据的 sn-p。我正在使用第 4 版
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    请看下面的网址:

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

    【讨论】:

      猜你喜欢
      • 2011-05-02
      • 2013-02-13
      • 2018-12-19
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2017-02-13
      相关资源
      最近更新 更多