Автозагрузка jqgrid и остановка при редактировании

0

Я пытаюсь реализовать сетку autorefresh и останавливаться при редактировании/добавлении/поиске пользователя, поэтому я использую clearInterval в событии ondblClickRow (поскольку я использую встроенное редактирование).

Итак, моя проблема в том, когда и где перезапустить автозагрузку. Я пытаюсь в loadComplete событие, которое, кажется, место для beter, НО каждый раз loadComplete запускает setInterval() для reloadGrid, он "умножает" вызов reloadGrid! Другими словами, первый раз (через 8 секунд) он перезагружается нормально. Второй раз он вызывает 2 перезагрузки. В третий раз он вызывает 4 перезагрузки. В четвертый раз он называет 8 перезагрузок и т.д.... это означает, что каждый раз каждый аякс-запрос!

Что неверно? Я был бы признателен за помощь, спасибо!

Вот мой код:

var mySeconds = 10 * 1000; //seconds *1000
var myTimer;

function autoReloadGrid($grid) {
    $grid.trigger("reloadGrid", [{current:true}]);
};

var $myGrid = $("#myGrid");

$myGrid.jqGrid({ 
    //grid options here...

    ondblClickRow: function(rowId) {
        clearInterval(myTimer);     
        //editRow here...
    },

    loadComplete: function() {
        console.log('myTimer = ' + myTimer);
        myTimer = setInterval( function() { autoReloadGrid($myGrid) }, mySeconds);
    }
 })

Примечание. Я тестирую значение myTimer с помощью console.log, и каждый раз, когда он запускается, он показывает разные идентификаторы.

Теги:
jqgrid

1 ответ

0
Лучший ответ

Основная проблема в вашем коде заключается в следующем: вы можете создавать несколько таймеров, которые выполняют autoReloadGrid. Вы отменяете только последний созданный таймер внутри ondblClickRow.

Важно понимать, что loadComplete может выполняться несколько раз: по поисковому loadComplete, сортировке и т.д. Поэтому я рекомендую включить вызов clearInterval перед setInterval.

  • 0
    Спасибо! Итак, как вы сказали, это правильно? loadComplete: function () {clearInterval (myTimer); myTimer = setInterval (function () {autoReloadGrid ($ myGrid)}, mySeconds); }
  • 0
    @Aberel: Да, это должно работать. Вы можете заменить clearInterval(myTimer); to if (myTimer !== undefined) { clearInterval(myTimer); } , но это на самом деле не требуется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню