Проблема: необходимо узнать, изменились ли записи в хранилище 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('Записи не изменены');
Комментариев нет:
Отправить комментарий