2012-07-30 161 views
3

我正在使用dgrid OnDemandGrid來顯示來自Dojo JsonRest商店的數據。這工作得很好,但我希望網格自動顯示更改的數據。在服務器告訴所有客戶端哪些數據發生了變化的情況下實現基於推送的方法太費工夫了,所以我正在尋找一種基於客戶端的解決方案。使用dgrid的refresh()沒有用,因爲這會導致閃爍並重置整個網格。自動刷新dgrid內容

到目前爲止,我的最佳猜測是定期從第二個商店實例中獲取所有數據,將其與實時商店實例進行比較,並使用Observable存儲包裝向網格通知任何已更改的數據。

有更好,更優雅的解決方案嗎?如果不是,我該如何做到最好?

編輯:這種方法的問題是要知道哪些行當前顯示在網格中。我的應用程序使用大量數據,因此在兩個dojo商店中同步整個集合並不是一個好主意。有沒有辦法確定網格中當前顯示哪些行?理想情況下,網格會定期重新請求當前顯示行的數據。不能那麼辛苦,對吧?

EDIT2:我的最好的辦法,到目前爲止是「黑客」的Observable店,跟蹤所有的呼叫到observe。然後,我會定期重新執行觀察到的查詢並將更改合併到實時商店中。 問題是,dgrid保持太多觀察者打開這個工作順利。它關閉了其中的一些,所以在我的代碼中沒有錯誤,我將farOffRemoval設置爲500(也嘗試越來越高)。

這是我到目前爲止的代碼:https://gist.github.com/3225927

它遠不完成,但它顯示足夠的調試信息顯示問題出在哪裏。由於可能沒有人想要設置這個,並且jsfiddle上沒有dgrid,我可以告訴你,在一個1000入口網格中滾動一下之後,大約有10-15個觀察者和observerStats.abs(至少觀察到所有行的計數一次)大約是750

+0

我很想聽到,如果你已經找到了更好的解決方案,或者如果您使用的是可觀察黑客消力。我目前正在努力解決同樣的問題。 – Frode 2013-02-20 21:14:27

+0

是的,我做了,看到我的新答案的細節。 – xato 2013-02-21 10:20:52

回答

0

你可以使用一些CacheStore,你會簡單地衝洗(關閉/銷燬)定期

http://dojotoolkit.org/reference-guide/1.7/dojo/store/Cache.html

因此,基本上,你清潔CacheStore,然後重新查詢。

+0

我很抱歉,但這不起作用(store.Cache不緩存查詢,只有單個項目),但它也錯過了我的問題的重點。 – xato 2012-08-01 11:35:31

+1

噢,請幫我正確地嘗試幫助...順便說一句,但是因爲我在下降的同時,我會爲我保留它。玩的開心。 順便說一句,store.Cache緩存查詢,如果你想使用緩存查詢,你必須使用store.Cache.query()而不是JsonRest.query()。不管... – PEM 2012-08-01 12:53:41

+0

加油。不需要粗魯。如果你有解決方案,我會非常樂意接受並接受它。可悲的是你又錯了。 store.Cache將所有單個項目保存到緩存存儲區(我們稱之爲內存)。如果你想獲得查詢,而不是緩存中的單個項目,你必須使用Memory.query而不是Cache.query – xato 2012-08-01 14:56:46

0

很多時間思考後,我發現了一個更好的解決問題的辦法: 我創建了一個緩存存儲,最初接種所有數據庫記錄(所以如果你確實有幾百萬的記錄,這可能不是比例) 。此高速緩存存儲包裝在Observable存儲中,並通過輪詢服務器以進行更改(使用帶有Redis後端的普通HTTP,不像WebSockets或Comet)。

代碼:https://gist.github.com/anonymous/5003727

+0

謝謝!不幸的是,我確實有數百萬條記錄(嗯,至少接近這個數量級),但是這給了我一些想法(我的數據從未改變,只增長一端)。 – Frode 2013-02-21 10:38:15