如何检查dojo.datagrid加载完成?

时间:2011-03-25 23:48:59

标签: dojo onload dojox.grid.datagrid

我的一个页面中有一个dojo.datagrid。 Datagrid及其存储(通过调用URL)由声明方法创建。而不是动态/程序化。

我需要执行一个javascript方法,它在我的datagrid下面显示一个div(它需要来自datagrid的数据很少)。我应该在我的数据网格加载完成后才显示div;而不是在此之前。

我正在寻找像datagrid完成onload的事件。 dojo.datagrid是否有任何事件?我没有在事件的dojo.Datagrid文档列表中看到它。

有没有办法检查dojo datagrid onload是否已完成?

有没有办法使用dojo.connect来处理这个?

如果我们有任何办法,请告诉我......

谢谢, 拉吉。

4 个答案:

答案 0 :(得分:5)

数据网格本身从未实际加载所有可用数据,它只显示其商店中数据的子选择。

您需要绑定到商店事件以捕获onload事件。由于商店可以从很多地方加载数据,因此您需要将onComplete函数传递给网格存储的fetch方法。

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

您还可以以编程方式创建商店,使用onComplete侦听器调用fetch,并在完成对商店的onComplete侦听器中的项目的修改后,调用myGrid.setStore(myStore);

答案 1 :(得分:3)

DataGrid有一个事件_onFetchComplete,您可以使用dojo.connect连接到该事件。请注意,它以_开头,因此它应该是一个私有/受保护的事件,并且它的行为可能会在较新的Dojo版本中发生变化。我知道它在Dojo 1.6中运行良好。

答案 2 :(得分: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...    
    });
});

答案 3 :(得分: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!
}