2015-06-19 90 views
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,那麼您可以使用其他選項navGridreloadGridOptions: { fromServer: true }

如果使用舊版本的jqGrid的,那麼你可以使用回調beforeRefresh直接重裝之前重置datatype"json"。我自己不使用Struts2。所以我不知道在哪裏可以指定回調beforeRefresh

或者您可以使用navigatorRefresh="false"從導航欄中刪除標準的刷新按鈕,並使用navigatorExtraButtons這似乎是替代navButtonAdd。如果我正確理解該選項,您可以指定免費代碼onclick,它可以滿足您的所有需求。您可以使用icon: "ui-icon-refresh"使自定義按鈕看起來與標準刷新按鈕完全相同。在onclick的內部,您可以設置datatype: 'json'並觸發"reloadGrid"

+0

Struts2插件使用jqGrid 4.6.0,因此我無法使用該新選項。但你對舊版本的建議完美運作。再次感謝。有沒有辦法在調用.trigger(「reloadGrid」)之後應用現有的本地過濾/排序? – user3420328

+0

@ user3420328:我不確定你如何在Struts2中做到這一點,但是你需要做的一切事情是在**重裝之前保存'postData.filters' **,設置'datatype:'json'',觸發reloadGrid ,那麼你需要用小代碼'var $ self = $(this),p = $ self.jqGrid(「getGridParam」)包含'loadComplete';如果(p.datatype ===「json」){setTimeout(function(){p.postData.filters = previouslySavedFilter; p.search = true; $ self.trigger(「reloadGrid」);},50);}'在* jqGrid已經將'datatype'改爲'「local」'後,'setTimeout'中的代碼將被執行,並且使用過濾器重新加載爲本地。 – Oleg

+0

我似乎無法獲得此代碼的工作。我不熟悉JavaScript,所以我不知道如何保存postData.Filters?你能給我一個這個過程的例子嗎? – user3420328