Проблема: необходимо узнать, изменились ли записи в хранилище Store . Пример практической задачи, сводящейся к описанной - например, проверка состояния таблицы EditorGridPanel.
Решение:
if (Store.getModifiedRecords().length == 0)
alert('Записи изменены');
else
alert('Записи не изменены');
Аналогично можно проверить, например, изменились ли записи EditorGridPanel:
if (EditorGridPanelElement.store.getModifiedRecords().length == 0)
alert('Записи изменены');
else
alert('Записи не изменены');
Однако, этот подход не обнаруживает события удаления записей из хранилища! Таким образом, удалив одну или несколько записей, мы изменили хранилище, однако
getModifiedRecords()
не вернет нам ничего - событие удаления необходимо отслеживать самостоятельно. Предлагаемый автором вариант предельно прост: при загрузке хранилища мы устанавливаем ему метку dirtyMark
, равную false
- операции удаления не производились; при удалении обновляем метку в true
: var myStore = new Ext.data.JsonStore({
url: 'serviceUrl/',
root: 'result',
fields: myFields,
listeners: {
remove: function(){
myStore.dirtyMark = true;
},
load: function() {
myStore.dirtyMark = false;
},
save: {
myStore.dirtyMark = false;
}
}
});
Условие проверки изменения состояния хранилища в таком случае будет выглядеть следующим образом:
if (Store.getModifiedRecords().length == 0
&& myStore.dirtyMark === true)
alert('Записи изменены');
else
alert('Записи не изменены');
Комментариев нет:
Отправить комментарий