Ссылаясь на слегка измененную версию демо-версии локального редактирования jqGrid для пользователя @Oleg, расположенную здесь: http://www.dataactive.net/local_editing.htm
... после удаления одной строки с помощью значка корзины для мусора на нижней панели инструментов или кнопки «Удалить» на верхней панели инструментов в Firebug выдается следующая ошибка:
"Ошибка сети: 404 не найдено - http://www.dataactive.net/clientArray"
@ Олег, ты можешь выяснить, почему это происходит?
Теперь, когда эта проблема решена с удалением строк, я наблюдаю еще кое-что (имея в виду, что это редактирование «локальных данных»), когда вновь добавленные строки удаляются, они, похоже, не исчезают. Рассмотрим код myDelOptions из вашей демонстрации (@Oleg), который я пытаюсь использовать в другом сценарии для производственных целей:
myDelOptions = {
// because I use "local" data I don't want to send the changes
// to the server so I use "processing:true" setting and delete
// the row manually in onclickSubmit
onclickSubmit: function (options, rowid) {
var grid_id = $.jgrid.jqID(grid[0].id),
grid_p = grid[0].p,
newPage = grid_p.page;
// reset the value of processing option to true to
// skip the ajax request to 'clientArray'.
options.processing = true;
// delete the row
grid.delRowData(rowid);
$.jgrid.hideModal("#delmod" + grid_id,
{ gb: "#gbox_" + grid_id,
jqm: options.jqModal, onClose: options.onClose
});
$("#list")[0].refreshIndex();
setTimeout(function () {
$("#list").trigger("reloadGrid", [{ current: true}]);
}, 100);
calculateTotal();
if (grid_p.lastpage > 1) {// on the multipage grid reload the grid
if (grid_p.reccount === 0 && newPage === grid_p.lastpage) {
// if after deliting there are no rows on the current page
// which is the last page of the grid
newPage--; // go to the previous page
}
// reload grid to make the row from the next page visable.
grid.trigger("reloadGrid", [{ page: newPage}]);
}
return true;
},
processing: true
};
функция calculateTotal()
, которая выполняет итерацию по объекту строки, просто принимает числовые значения столбцов оставшихся строк и пересчитывает их в итоговую строку нижнего колонтитула, но происходит итерация по объекту строки сетка показывает, что «удаленные» строки все еще там, в массиве или чем-то еще, и поэтому новый итог не может быть вычислен, потому что кажется, что ничего не изменилось, строки фактически не удалены. Я не понимаю, что на самом деле происходит, когда «delRowData» используется в контексте локальных данных, но кажется, что он «удаляет» только строку из визуальной сетки, но она все еще является частью объекта строки. И, что еще более странно, если добавится еще одна новая строка, «удаленные» строки появятся точно так же, как и в дополнение к новой строке. Как видите, у меня есть refreshIndex[0]
и trigger(reload)
, но строка не удаляется, если есть trigger("reload")
, а refreshIndex[0]
не имеет никакого эффекта. Кто-нибудь может обратиться к этому? Требуется дополнительный код?