Почему я получаю исключение Uncaught при загрузке хранилища данных? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть GridPanel, который поддерживается DataStore (ExtJS 4). Итак, когда пользователь выбирает строку и нажимает кнопку удаления, я отправляю на сервер запрос POST с идентификатором выбранной записи, удаляю запись и затем при возврате снова загружаю хранилище данных.

Запись успешно удалена, сервер возвращает код состояния OK. Но, если пользователь выбирает THE LAST ROW из GridPanel, я получаю следующую ошибку:

Uncaught TypeError: Невозможно прочитать свойство 'id' из неопределенного

У меня нет других событий на Grid Panel или DataStore.

Вот мой код удаления:

function deleteTEDetailExceptions() {
   try {

      if(tedetailExceptionsEditorGrid.getSelectionModel().selected.length < 1) {
         statusMessage("Please select an exception first", true);
         return;
      }

      var record = tedetailExceptionsEditorGrid.getSelectionModel().selected.items[0];
      currentTEDetailExceptionKey = record.data["tedetailExceptionKey"];

      // send the delete request
      Ext.Ajax.request({
         url: '/timesheets/action.do',
         method: 'POST',
         params:{
            tedetailExceptionKey : currentTEDetailExceptionKey,
            type                 : "tedetailExceptions",
            "delete"             : "true"
         },
         success: function(response) {
            if(response.statusText == "OK") {
               tedetailExceptionsEditorGrid.getSelectionModel().clearSelections();
               TEDetailExceptionsStore.remove(record);

               // reload the store
               Ext.Function.defer((function(){

                  TEDetailExceptionsStore.load({
                     params:{
                        timeEntryDetailKey : timeEntryDetailKey,
                        type               : "tedetailExceptions"
                     }
                  });
               }),250);
            }
         }
      });

   }
   catch(e) {
      console.log(e);
   }
}

Что я делаю не так?

EDIT

Мне удалось решить проблему с помощью следующего кода. С моей стороны было довольно глупо перезагружать хранилище данных, когда мне это не нужно !!

function deleteTEDetailExceptions() {
   try {

      if(tedetailExceptionsEditorGrid.getSelectionModel().selected.length < 1) {
         statusMessage("Please select an exception first", true);
         return;
      }

      var record = tedetailExceptionsEditorGrid.getSelectionModel().selected.items[0];
      tedetailExceptionsEditorGrid.getView().refresh();

      currentTEDetailExceptionKey = record.data["tedetailExceptionKey"];

      // send the delete request
      Ext.Ajax.request({
         url: '/timesheets/action.do',
         method: 'POST',
         params:{
            tedetailExceptionKey : currentTEDetailExceptionKey,
            type                 : "tedetailExceptions",
            "delete"             : "true"
         },
         success: function(response) {
            if(response.statusText == "OK") {
               TEDetailExceptionsStore.remove(record);
            }
         }
      });

   }
   catch(e) {
//      console.log(e);
   }
}

1 Ответ

2 голосов
/ 22 июля 2011

Я не уверен, почему вы перезагружаете данные после удаления записи.Используете ли вы также панель инструментов для подкачки?

ExtJs, очевидно, считает, что в последней строке есть запись и, когда вы перезагружаете все данные, пытаетесь вызвать TEDetailExceptionsStore.removeAll () перед перезагрузкой.хранилище данных.

Другая возможность может заключаться в обновлении вида сетки после удаления записи из хранилища.Вы можете сделать это с помощью grid.getView (). Refresh (). Это может заставить ExtJS признать, что последняя строка не содержит запись

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...