Итак, давайте начнем с решения (нажмите кнопку 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 ..
Значит, это должно было сработать (но не сработало).