jqgrid-обновление сетки после загрузки файла ajax
Как обновить сетку на основе jqgrid из-за пределов самой сетки? В коде для сетки существует опция вызова reloadGrid
. Тем не менее, я хочу перезагрузить сетку после загрузки файла ajax, вне кода jqgrid. Как я мог бы назвать reloadGrid
в этом контексте?
Я понимаю, что могу полностью перезагрузить всю страницу с помощью чего-то вроде: location.reload();
но это перезагружает всю партию и возвращает меня на первую страницу результатов для сетки и вроде как разрушает цель использования ajax для загрузки файла в первую очередь.
Некоторый код:
ReloadGrid вызывается изнутри jqgrid следующим образом:
$("#thegrid").trigger("reloadGrid");
Но он ничего не делает, когда вызывается из моего ajaxupload:
onComplete: function(file, response) {
if (response == 'success') {
//location.reload();
$("#thegrid").trigger("reloadGrid");
}else if (response == 'error') {
alert("Doh!");
}
Если я раскомментирую location.reload()
, страница перезагружается, но с незафиксированным триггером (как в приведенном выше примере) ничего не происходит вообще. Так как же мне перезагрузить эту сетку?
2 ответа:
Я не вижу проблем в использовании
$("#thegrid").trigger("reloadGrid")
вне jqGrid. Вероятно, проблема заключается в отношении междуonComplete
изajaxupload
и$("#thegrid")
вообще.Например, вы можете определить внешнюю кнопку на той же странице, что и jqGrid с элементом
<table>
, имеющим id= "thegrid", и использовать$("#button").click(function() { if ($("#thegrid").length === 0) { alert("no element with id='thegrid' is found"); } if ($.isFunction($("#thegrid").jqGrid) !== true) { alert("$('#thegrid') is not jqGrid"); } var e = $("#thegrid").data("events"); if (typeof(e) !== "undefined" && typeof(e.reloadGrid) !== "undefined") { $("#thegrid").trigger("reloadGrid"); } else { alert("$('#thegrid') is not bound to 'reloadGrid' function"); } }
Вы увидите, что код работает без каких-либо предупреждений. Вы можете включить тот же код в обработчик
onComplete
Вашего ajaxupload.Чтобы убедиться, что функция reloadGrid работает, вы можете использовать loadComplete :
loadComplete: function() { alert("grid is loaded/reloaded"); }
Обновлено : начиная с jQuery 1.8 следует использовать
$._data($("#thegrid")[0], "events");
вместо$("#thegrid").data("events")
, чтобы получить список всех событий сетки.