jqgrid - обновить сетку после загрузки ajax-файла. - PullRequest
2 голосов
/ 21 декабря 2010

Как бы я обновил сетку на основе 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 ]

4 голосов
/ 21 декабря 2010

Сделать функцию кода для загрузки jqgrid. Сначала выгрузите Jqgrid и вызовите предыдущую функцию:

$("#thegrid").GridUnload();
Loadthegrid();

Надеюсь, это поможет.

3 голосов
/ 22 декабря 2010

Я не вижу проблем в использовании $("#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"), чтобы получить список всех событий сетки.

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