Я думаю, что вы спрашиваете о важной проблеме, существующей в текущей версии jqGrid. Сейчас сложно реализовать больше как один обработчик событий в jqGrid. Эта проблема не важна для небольших проектов, где вы используете jqGrid, но может быть важна в случае, если вы хотите создать некоторые классы, которые интерпретируют jqGrid. Ваш текущий обходной путь в порядке, но есть ограничение, которое вы понимаете сами. Основная проблема в том, что в пути вы можете реализовать только один более дополнительный loadCompleteEx
обработчик.
Я хотел бы предложить вам использование jQuery.trigger или лучше jQuery.triggerHandler . Вы можете использовать его вместе с jQuery.bind и jQuery.unbind . Таким образом, вы можете определить любое количество обработчиков событий, которые работают как стандартные события jQuery.
Например,
var grid = $("#list");
grid.bind('jqGridLoadComplete',function(e,data) {
alert ("in first jqGridLoadComplete event handler. Called for the page " +
data.page);
});
grid.jqGrid({
// jqGrid parameters
// ...
loadComplete: function(data) {
alert("main load complete");
$(this).triggerHandler("jqGridLoadComplete", data);
}
});
grid.bind('jqGridLoadComplete.jqGrid',function(e,data) {
alert ("in second jqGridLoadComplete event handler. Called for the page " +
data.page);
});
Во втором jQuery.bind
я использовал событие пространства имен «jqGridLoadComplete.jqGrid» из пространства имен «jqGrid». Таким образом, вы можете использовать все, что вы знаете (и что вам нужно) о стандартных событиях в jQuery.
См. Соответствующую демонстрацию здесь . Попробуйте переключить страницы в сетке или изменить сортировку на вызов loadComplete
.
Я связываю второе jqGridLoadComplete
после определения jqGrid. Поскольку в моей демонстрации используется datatype:'local'
, первый вызов loadComplete
будет до выполнения привязки. Таким образом, при первом выполнении loadComplete
будет обработан второй обработчик событий jqGridLoadComplete
. Поэтому вам лучше связать свой обработчик событий до определения jqGrid. В этом случае вы можете быть уверены, что событие будет вызываться всегда.
ОБНОВЛЕНО: ВАЖНО !!! . Одно не должно вызывать явное jqGridLoadComplete
событие внутри loadComplete
, если вы используете текущую версию jqGrid. jqGrid сделайте это уже для вас . Приведенный выше код был написан до , соответствующие функции включены в основной код jqGrid. Ответ только что описал основную идею , как несколько обработчиков событий могут быть реализованы в jqGrid. После написания ответа я отправил несколько запросов на получение запросов на триранд с моим предложением реализовать события jQuery в jqGrid. Начиная с версии 4.3.2 (см. здесь ) jqGrid поддерживает события.