0

У меня есть страница Struts2 jqGrid, которая загружается штрафом. Когда нажата кнопка обновления навигатора, я хочу, чтобы она перезагрузила сетку с сервера.jqGrid Обновить с сервера Выпуск

<sjg:grid 
     altRows="false" 
     id="gridtable" 
     dataType="json" 
     editurl="%{editurl}" 
     filter="true" 
     filterOptions="{stringResult:true}" 
     gridModel="gridModel" 
     gridview="true" 
     height="600" 
     href="%{remoteurl}"   
     loadonce="true" 
     navigator="true" 
     navigatorAdd="%{editPermission}" 
     navigatorAddOptions="{ 
      closeAfterAdd:false, 
      closeOnEscape:true, 
      reloadAfterSubmit:true, 
      addCaption:'Add Record'}" 
     navigatorDelete="false" 
     navigatorEdit="%{editPermission}" 
     navigatorEditOptions="{ 
      closeAfterEdit:false, 
      closeOnEscape:true, 
      afterSubmit:function(response, postdata) { 
         return isError(response.responseText); 
        } 
     }" 
     navigatorRefresh="true" 
     navigatorSearch="false" 
     onCompleteTopics="loadComplete" 
     onSelectRowTopics="rowselect" 
     onEditInlineBeforeTopics="beforeFormLoad" 
     pager="true" 
     pagerButtons="true" 
     rowList="25,50,100" 
     rowNum="25" 
     rownumbers="true" 
    > 

У меня есть следующая привязка, чтобы задать тип данных json при нажатии кнопки обновления.

$("#refresh_gridtable").bind("click", function(){ 
    $("#gridtable").jqGrid("setGridParam", {datatype: 'json'}); 
    return [true]; 
}); 

Однако, когда я нажимаю на кнопку обновления он перезагружает только данные с сервера на любой другой мыши. Если я выполняю сортировку на стороне клиента в определенном столбце, тогда нажмите «Обновить», он не будет перезагружать с сервера первый клик, второй щелчок будет обновляться с сервера без сортировки (значки сортировки все еще видны в этой точке вверху столбца), то третий клик не ударит по серверу, но применит сортировку.

Как получить обновление для перезагрузки с сервера каждый раз, а затем применить любые существующие поля сортировки/фильтра?

ответ

1

Решение немного зависит от базового jqGrid, который вы используете. Если вы используете free jqGrid 4.9, вы можете использовать дополнительную опцию navGrid: reloadGridOptions: { fromServer: true }.

Если вы используете старую версию jqGrid, вы можете использовать обратный вызов beforeRefresh для сброса datatype на "json" непосредственно перед перезагрузкой. Я сам не использую Struts2. Так что я не знаю, где вы можете указать обратный вызов beforeRefresh

В качестве альтернативы вы можете использовать navigatorRefresh="false" удалить стандартную кнопку Refresh на панели навигатора и использовать navigatorExtraButtons, который, кажется, замена для navButtonAdd. Если я правильно понял вариант, вы можете указать бесплатный код onclick, который сделает все, что вам нужно. Вы можете использовать icon: "ui-icon-refresh", чтобы пользовательская кнопка выглядела так же, как кнопка стандартной кнопки Refresh. Внутри onclick вы можете установить datatype: 'json' и вызвать "reloadGrid".

+0

Плагин Struts2 использует jqGrid 4.6.0, поэтому я не могу использовать эту новую опцию. Но ваше предложение для старой версии отлично работало. Еще раз спасибо. Есть ли способ применить существующий локальный фильтр/сортировку после вызова метода .trigger ("reloadGrid")? – user3420328

+0

@ user3420328: Я не уверен, как вы можете это сделать в Struts2, но вам нужно в общем случае сохранить 'postData.filters' ** перед ** перезагрузкой, установить' datatype: 'json'', trigger reloadGrid , тогда вам нужно включить 'loadComplete' с небольшим кодом' var $ self = $ (this), p = $ self.jqGrid ("getGridParam"); if (p.datatype === "json") {setTimeout (function() {p.postData.filters = ранееSavedFilter; p.search = true; $ self.trigger ("reloadGrid");}, 50);} ' Код из 'setTimeout' будет выполнен * после того, как * jqGrid уже изменил' datatype' на '' local '', а перезагрузка с фильтром будет локальной. – Oleg

+0

Кажется, я не могу заставить этот код работать. Я не знаком с javascript, поэтому не знаю, как сохранить postData.Filters? Можете ли вы привести мне пример этого процесса? – user3420328