extjs 3.4 getModifiedRecords после markDirty не работает - PullRequest
0 голосов
/ 24 мая 2018

Я использую extjs 3.4 и хочу, чтобы записи появлялись при использовании getModifiedRecords.

dtl.store.getAt(i).markDirty(); Это то, что я делал, и когда я console.log() это, я вижу dirty:true, а такжеmodified:{idStyle: "TEST-4", idStyleDtl: 2052, color: 6, colorNm: "BLACK", s1: 0, …}

Это ясно показывает, что оно было изменено, и есть грязный флаг, но когда я делаю ojbStore.getModifiedRecords(), он возвращает просто пустой [].Я не понимаю, почему он не возвращает записи modified. Есть ли какие-либо другие условия, которые мне нужно изменить?

Спасибо

1 Ответ

0 голосов
/ 27 мая 2018

Итак, давайте начнем с решения (нажмите кнопку X и загляните в консоль): FIDDLE

Теперь здесь происходит то, что я вручную вызываю свою добавленную функцию в магазине под названием markDirtyFix и передать ему запись (которую я хочу пометить как грязную), чтобы поместить ее в список измененных записей.На самом деле это скопированная функция afterEdit из магазина.Я только что прокомментировал fireEvent об обновлении (потому что это заставляет запрос на обновление, и вы хотите сделать его грязным «только локально»):

afterEdit: function(record){
    if(this.modified.indexOf(record) == -1){
        this.modified.push(record);
    }
    this.fireEvent('update', this, record, Ext.data.Record.EDIT);//removed
},

Итак, чудо происходит, и store.getModifiedRecords() возвращает вашу записьВ массив включены.

Теперь поговорим о проблеме.Таким образом, проблема в том, что markDirty() выглядит так (из официальных документов):

markDirty: function(){
    this.dirty = true;
    if(!this.modified){
        this.modified = {};
    }
    this.fields.each(function(f) {
        this.modified[f.name] = this.data[f.name];
    },this);
}

, и здесь нет ничего, что вызывало бы afterEdit или что-то подобное, чтобы сделать ваши записи грязными на уровне магазина(ну, как вы видите, он становится грязным только на рекордном уровне).Может быть, кто-то скажет, что он предназначен для использования только на уровне записи, но описание документа markDirty гласит:

Пометка записи как грязной приводит к тому, что фантом возвращается Ext.data.Store.getModifiedRecords ..

Значит, это должно было сработать (но не сработало).

...