2011-03-25 66 views
4

我在我的一個頁面中有一個dojo.datagrid。 Datagrid及其存儲(通過調用URL)由聲明方法創建。而不是動態的/程序化的。如何查看dojo.datagrid加載完成?

我需要執行一個javascript方法,它在我的數據網格下方顯示一個div(這需要datagrid中的少量數據)。我應該在我的數據網格加載完成後才顯示div;而不是在此之前。

我正在尋找類似於onload的事件完成了datagrid。 dojo.datagrid有什麼事嗎?我沒有在事件的dojo.Datagrid文檔列表中看到它。

有沒有辦法檢查dojo datagrid onload是否完成?

有沒有辦法使用dojo.connect來處理這個問題?

請讓我知道,如果我們有什麼辦法做到這一點...

感謝, 拉吉。

回答

5

datagrid本身從未實際加載所有可用的數據,它僅顯示其存儲中的數據的子選擇。

您需要綁定到商店事件才能捕獲onload事件。由於商店可以從很多地方加載數據,因此您需要將onComplete函數傳遞給網格商店的提取方法。

grid.store.fetch({onComplete : function (items) { // Do something }}); 

您還可以創建存儲編程,叫你的onComplete偵聽獲取,一旦你已經完成在店裏的聽衆的onComplete項目的修改,調用myGrid.setStore(的MyStore);

+0

這對1.8我不起作用。網格啓動後是否需要執行提取?我在創建網格時傳遞查詢,如「query:{toUserId:self._userId}」,所以我不需要調用fetch。我現在使用下面的方面解決方案。 – unludo 2012-12-31 17:33:56

+0

將在增強網格中工作....我使用的是dojo 1.10版本 – shv22 2017-08-03 04:56:07

0

您可以設置一個計時器來檢查數據加載,運行每秒左右,直到裝載完成(的setSelectedIndex將返回true):

private var load_check:uint; 

    /* start the interval timer when the app is initialized */ 
protected function init():void 
{ 
    load_check = setInterval(getTime, 500); // 1/2 second 
} 
private function getTime():void 
{ 
    if (!datagrid.setSelectedIndex (0)) 
     return; 
    clearInterval(load_check); // data loaded! 
} 
3

DataGrid有一個事件_onFetchComplete您可以連接到dojo.connect。請注意,它始於_,所以它應該是一個私有/受保護的事件類型,其行爲可能會在更新的Dojo版本中發生變化。我知道它在Dojo 1.6中運行良好。

3

正如Alex已經指出的那樣,您可以對(不幸)私人_onFetchComplete事件做出反應。使用dojo 1.7,這可以通過dojo.aspect來實現,例如:

require(["dojo/aspect", "dojox/grid/DataGrid", ...], function(aspect, DataGrid, ...) 
    var myGrid = new DataGrid({ ... }); 
    aspect.after(myGrid, "_onFetchComplete", function() { 
     // Do something with myGrid...  
    }); 
});