2012-11-06 24 views
1

我試圖讓dgrid使用JsonRest。我已經實現了一個基於Perl的服務器端組件,它返回了JSON數據。響應數據如下所示:Dojo商店,Dgrid和不穩定的條目

{"id:": 00016, "num": 00016, "range": "15 - 63 (49)", "uid": "0", "ipaddress": "xx.xx.xx.xx", "hostname": "", "referer": "http:\/\/www.facebook.com\/l.php?u=http%3A%2F%2Fasisaid.com%2Fjournal%2Farticle%2F1604.html&h=8e20f", "useragent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8", "date":1281010282000} 

每個散列「行」都在一個數組中。當dgrid加載時,它會在沒有Range標頭的情況下查詢服務器組件,並且服務器組件返回默認的數據範圍。然後,dgrid再次以「範圍:項目= 0-24」進行查詢。作爲響應,服務器以列​​出的格式提供條目1-25,並且具有響應標題「Content-Range:項目0-24/470」。

當dgrid請求接下來的40個項目時,會出現問題。它要求「Range:items = 23-63」,並且服務器成功地完成了請求(我可以使用WebKit開發人員工具查看它,這些工具顯示數據已被檢索到)。但是,當我滾動瀏覽dgrid本身時,我看到了1-25行,然後跳到了第40行。如果我繼續滾動,它將繼續加載所有470個條目,但網格開始轉移並且行數急劇增加無序(例如,網格從第8行開始,第1行在第75行之後出現)。

我以爲這可能是因爲我的JSON數據沒有包含一個絕對唯一的ID,所以我添加了一個(「id」)idProperty設置。不行。我還嘗試添加10行重疊以查看是否有幫助,但這似乎只會讓事情變得更糟。

這裏是我的Dojo代碼:

require(["dojo/_base/declare", "dojo/store/JsonRest", "dojox/data/QueryReadStore", "dgrid/OnDemandGrid", "dgrid/Keyboard", "dgrid/Selection", "dojo/domReady!"], function(declare, JsonRest, QueryReadStore, OnDemandGrid, Keyboard, Selection){ 


var store = new JsonRest({ 
    target: "perlsqllog2.pl", 
    sortParam: "sort", 
    idProperty: "id" 
}); 



var grid = new declare([OnDemandGrid, Keyboard, Selection])({ 
    store: store, 
    query: {aid: "1604" }, 
    queryRowsOverlap: 10, 
    columns: { 
     num: "ID", 
     range: "Debug", 
     uid: "SAFARI User ID", 
     ipaddress: "IP Address", 
     date: "Date" 
    }, 
}, "grid"); 

}); 

回答

0

事實證明,我在JSON數據有一個錯字。我在JSON中輸出了「id:」而不是「id」,這就阻止了網格將它看作唯一的ID。顯然,dgrid確實需要一個唯一的id來工作,而且現在似乎正在提供一個唯一的ID,所以它開心地工作。