2015-03-31 195 views
1

我有一個jQGrid它有loadComplete和gridComplete參數。網格目前工作正常。jqGrid gridComplete問題

現在,我不得不做一個通用的更改,我需要添加一個更多的事件,它對傳呼機的事件起作用。

我添加了下面的代碼來綁定一個更多的事件gridComplete

jQuery('#grid0').jqGrid('setGridParam', { gridComplete: function() 
      { 
          myGenericMethod(); 

      }}); 

與此代碼的問題是:myGenericMethod()被調用,但不執行原始gridComplete塊。

我相信@Oleg會得到答案。

我的網聲明如下:

$("#grid0").jqGrid({ 
     datatype: "jsonstring", 


    datastr:GetJSON1(), 

    colNames:[strFieldNames[0], strFieldNames[1], strFieldNames[2], strFieldNames[3]], 

    colModel:[ 
     {name:'newdynaid', index:'newdynaid', width: 50, editable:true, editoptions:{readonly:false, size:5}, hidden:true,sortable:false}, 

     {name:strFieldValues[1], index:strFieldValues[1], editable:false, readonly:true, width:80}, 

     {name:strFieldValues[2], index:strFieldValues[2], editable:false, readonly:true, width:80, 
       hidden:false,sortable:true}, 

     {name:strFieldValues[3], index:strFieldValues[3], editable:false, readonly:true, width:80} 

     ], 


     postData: {}, 
     rowNum: 10, 
     height: "100%", 
     shrinkToFit: true, 
     autowidth: true, 
     rownumbers: false, 
     pager: '#pager0', 
     sortname: 'id', 

     viewrecords: true, 
     sortorder: "asc", 
     emptyrecords: "Empty records", 
     loadonce: true, 
     sortable: true, 

     rowList: [6,10,20,40,60,80,100], 

     loadComplete: function() { 
      var grid0 = jQuery("#grid0"); 
      var allDropDownElements = getAllDropDownElements0(); 
      var allDropDownElementRefTables = getAllDropDownElementRefTables0(); 
      processLoadComplete(grid0, allDropDownElements, allDropDownElementRefTables, 0); 
      }, 
     gridComplete:function() { 
      var grid0 = $("#grid0"); 
      var pager0Center = $("#pager0_center"); 
      processGridComplete(grid0, pager0Center, 0); 
      onLoadpopulateName(); 
      } 
     }); 

回答

2

與4.3.2版本開始的jqGrid與回調一起支持jQuery Events。當時我花了很多時間來創建合併到jqGrid的主代碼的相應的pull請求。後來在免費的jqGrid中,我更改了jqGrid的內部代碼,以便實際上每回調都有相應的jQuery事件。如果您需要編寫常見的動作(常見回調),這些事件非常重要,這些動作需要在項目的每個網格上完成。只有使用事件可以寫jqGrid 插件,它不保留任何回調。

事件的使用非常簡單。重要的是要明白,您可以在之前綁定事件jqGrid創建。這對於事件jqGridBeforeInitGrid(僅存在於免費jqGrid中),jqGridInitGridjqGridGridComplete,jqGridAfterGridComplete,jqGridLoadComplete, jqGridAfterLoadComplete,尤其重要。

我建議您閱讀the answer,其中描述了gridCompleteloadComplete之間的區別。我個人幾乎只使用loadComplete,但回調的選擇取決於您的確切要求。

讓我們真的需要使用常見的gridComplete。那麼你可以選擇定義一些動作之後gridComplete用於網格或之前它。取決於您應該使用jqGridGridComplete還是jqGridAfterGridComplete事件。讓我們jqGridAfterGridComplete是你需要的。然後,該代碼可以看起來如下

$("#grid0").bind("jqGridAfterGridComplete", function() { 
    // the event handler will be executed AFTER gridComplete 
    ... 
}); 
$("#grid0").jqGrid({ 
    // common options which you need 
    pager: "#pager0", 
    gridComplete:function() { 
     var $self = $(this), p = $self.jqGrid("getGridParam"), 
      pager0Center = $(p.pager + "_center"); //$("#pager0_center"); 
     ... 
    } 
}); 

上面的代碼將在兩個工作的jqGrid(從4.3.2版)和免費的jqGrid。如果您需要使用具有選擇一個事件,像jqGridAfterLoadComplete就應該添加第一附加的事件參數和使用的典型參數開始第二個參數:

$("#grid0").bind("jqGridAfterLoadComplete", function (e, data) { 
    // the event handler will be executed AFTER loadComplete 
    ... 
}); 

順便說免費的jqGrid讓你請使用pager: true並且不要定義空的<div id="pager0"></div>。在免費jqGrid 的情況下自動生成具有唯一ID的div並將jqGrid的pager選項修改爲id selecror。所以你可以使用gridComplete回調,就像上面的例子一樣。有關更多信息,請參閱the wiki article

+0

感謝您的回答,我知道您會有一個答案:) 我也渴望知道,如果我想執行gridComplete觸發器的gridCompleteFunction以及它們的執行順序,我會非常感謝你 – 2015-03-31 12:38:49

+1

@SashiKant:不客氣!如果我正確理解你,那麼你只需要看[行](https://github.com/free-jqgrid/jqGrid/blob/v4.7.0/js/grid.base.js#L1979-L1981)代碼:首先是'jqGridGridComplete',然後'gridComplete',最後是'jqGridAfterGridComplete'。免費jqGrid做[相同](https://github.com/free-jqgrid/jqGrid/blob/v4.8.0/js/grid.base.js#L2978-L2979),但它使用內部的'feedback'函數觸發基於回調名稱構建的名稱,然後調用回調。通過這種方式可以確保事件和回調都被調用。 – Oleg 2015-03-31 12:47:46

+0

嘿,我用'jqGridGridComplete',這個工作。非常感謝:) – 2015-03-31 13:36:42