Как получить грязные записи из хранилища данных ExtJS? - PullRequest
7 голосов
/ 09 июня 2011

Кроме более чистого просмотра записей в магазине и проверки грязного флага, есть ли более чистый способ?

EDIT

Я использую 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. Это значение 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);
    }
}

Ответы [ 4 ]

8 голосов
/ 21 октября 2011

Хитрость в том, что читателю магазина нужно назначить 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 reader, но я не понимаю, почему это не будет работать и для других структур данных.

6 голосов
/ 09 июня 2011

store.getUpdatedRecords() в ExtJs 4 или store.getModifiedRecords() в ExtJs3

3 голосов
/ 09 июня 2011

Как насчет метода getModifiedRecords () в вашем магазине? Это должно дать вам то, что вам нужно.

0 голосов
/ 29 октября 2011

Это из-за указанных проверок полей модели.

См. URL ниже:

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

...