Как добавить элемент в ExtJS GridPanel без запуска события selectedchange - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть интерфейс ExtJS, который решает проблему, я уверен, что у тонн людей было раньше.У меня есть служба, которая предоставляет список элементов, и мне нужно показать этот список в GridPanel.У меня эта часть работает.Когда я щелкаю один из элементов, я обрабатываю событие selectionchange в SelectionModel GridPanel и использую его для загрузки сведений о ресурсе из другого вызова REST.

Теперь я хочу иметь возможность добавить новый предмет.Кажется, это должно быть просто, но я хочу добавить элемент в GridPanel и в то же время очистить поля «детали», чтобы пользователь мог вводить новые детали и сохранять полный элемент.У меня есть кнопка Добавить, которая создает приглашение для ввода имени элемента.

Теперь я добавляю этот элемент в хранилище данных поддержки GridPanel (a JsonStore, если это имеет значение) и использую getSelectionModel().selectLastRow(), чтобы выделитьЭто.Конечно, это запускает событие selectionchange, которое хочет загрузить сведения о (несуществующем) элементе.Я пытался использовать .purgeListeners(), вызывая `selectLastRow (), затем восстанавливая прослушиватель selectionchange, но по какой-то причине измененное событие все еще срабатывает - у меня фактически нет никаких симптомов в пользовательском интерфейсе, но я могусм. в Firebug, что он выполняет (неудачный) вызов GET для получения сведений об элементе.

Я бы хотел, чтобы это не происходило, и я чувствую, что это должно быть обычной / легкой проблемой, но у меня нетЯ не смог найти решение.Какой правильный способ добавить новый элемент в GridPanel без попытки вашего кода попытаться «найти» элемент перед его сохранением?

ETA: Комментатор указал, что естьphantom свойство на объектах Record, которое звучит как то, что вы хотите.Однако, когда я загружаю свой список предметов как

STORE = new Ext.data.JsonStore({
  autoLoad: true,
  url: 'items'
  method: 'GET',
  storeId: 'store',
  root: 'list',
  remoteSort: false,
  fields: ['name']
});

все записи в списке, как только я их загружаю, помечаются phantom.phantom не работает с JsonStore?Должен ли я пойти по этому поводу другим путем?

ETA Опять: Хорошо, нашел его.Я не устанавливал свойство idProperty в конструкторе JsonStore, что означало, что у записей не было идентификатора, что означало, что они всегда были phantom.Теперь моя новая запись показывает phantom, а те, что уже есть в БД, - нет.Woo-Hoo!

1 Ответ

2 голосов
/ 05 апреля 2011

Я бы предпочел сделать это, не связываясь с цепочкой событий или обработчиками, которые я уже настроил.

Один простой способ выглядит следующим образом: "как-то выяснить в слушателе selectionchange, является ли выбранная запись постоянной или нет (пока)"

Часть "выяснения" может быть достигнута путем проверки записи .phantom, как это было предложено Кевином в комментариях ниже

...