2012-04-27 110 views
1

我正在使用Jqgrid顯示一些數據,使用DataType作爲本地,我不想回發到服務器並返回jsonString與要綁定的數據。我將Json字符串傳遞給客戶端,並使用addRowData逐個添加數據。如果由於我在每個單元格中的信息而導致數據的數量很大,它似乎會花費大量時間給用戶。在客戶端添加數據到Jqgrid

for (var i = 0; i < gridData.length; i++) 
     jQuery("#jqgInventory").jqGrid('addRowData', i + 1, JSON.parse(gridData[i])); 

是否有數據綁定到任何jqGrid的另一種方式,例如只要給它的JsonString作爲數據源,它將綁定更快或其他任何建議。

注意:使用DataType作爲Json並設置postUrl將比上述方法工作得更快。

請任何幫助! 由於提前, 阿拉

回答

3

這句話直接來自jqGrid的文檔:「存儲傳遞給電網的本地數據陣列,您可以直接指向這個變量的情況下,要加載一個陣列中的數據。它可以替代對相對大數據較慢的addRowData方法「。這正是你所說的。

見這裏:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options

這是你的工作示例:http://jsfiddle.net/yNw3C/649/

您只需放在選項:

data: my_data 

my_data是信息的陣列。

+0

+1 from me。你的回答是正確的。我只建議你1)在grid選項列表中加入'gridview:true'來提高性能,2)增加'height:'auto''來提高可視性和3)增加'rowNum'選項, '10000'或將尋呼機添加到網格。例如添加'toppager:true'。沒有分頁器的代碼將只顯示默認情況下的前20行('rowNum'的默認值),然後刪除其餘行。 – Oleg 2012-04-27 17:28:00

+0

感謝您的提示,是的,我剛剛解決了問題中提出的問題。我還建議使用尋呼機或增加顯示的最大行數。我剛剛從jqgrid示例中獲取了這個示例:http://www.trirand.com/blog/jqgrid/jqgrid.html。在加載數據 - >數組數據並將其轉換爲使用'data'參數。由於某些原因,他們在示例中使用了'addRowData'約定...可能還沒有更新過。 – 2012-04-27 17:40:30

+0

糟糕,我找到了正確的例子,在「新版本3.7」下,它也有一個尋呼機,我會更新小提琴。 – 2012-04-27 17:50:09

0

我同意來自Jeffery_The_Wind的另一個答案。他不會只寫他推薦的選項的名稱:data參數。添加一個應該使用gridview: true選項並且不要使用afterInsertRow回調很重要。

爲了理解:使用addRowData是填補電網最慢,最無效的方法。最大的問題是,如果您在頁面上插入元素或更改元素,至少必須通過Web瀏覽器重新計算所有現有元素的位置。放置在頁面上的元素越多,插入到下一個元素上的速度就越慢。

一個解決問題大多是在一個從兩個途徑:

  • 一個使用DocumentFragment準備DOM元素沾邊的層次結構,然後將片段在頁面上的一個操作。
  • 一個將所有或大部分更改的內容創建爲表示HTML片段的字符串,並使用innerHTML屬性將多個元素放置在頁面上的一個操作中。

jqGrid使用第二種方法。使用gridview: true來表現行爲很重要。因此,建議的方式,以填補當地電網是:

  • datatype: 'local'的使用和data參數數據。輸入data參數值的標準格式是包含行項目的數組。每個項目具有相同的屬性,如colModelname屬性的值。此外,每個項目應具有id屬性,該屬性定義「rowid」 - 網格的<tr>元素(行)的ID。如果您有其他格式的輸入數據,則必須使用描述數據格式的參數localReader參數。
  • 指定輸入數據的參數datatype: 'jsonstring'datastr的用法。 datastr參數的值可以是具有相同內容的JSON字符串或JavaScript對象。因此,如果您將數據作爲對象,則不需要使用JSON.stringify將其轉換爲JSON字符串。您可以額外使用jsonReader,其格式與您可能知道的datatype: 'json'相同。

data參數(在datatype: 'local'情況下)和datastr參數(在datatype: 'jsonstring'情況下)的數據的主要區別插入的是,輸入的數據將通過的jqGrid在data參數的使用的情況下和排序將包含在datastr參數的情況下未排序。