вторник, 29 марта 2011 г.

ExtJS: изменились ли записи в хранилище?

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

Комментариев нет:

Отправить комментарий