我的一个页面中有一个dojo.datagrid。 Datagrid及其存储(通过调用URL)由声明方法创建。而不是动态/程序化。
我需要执行一个javascript方法,它在我的datagrid下面显示一个div(它需要来自datagrid的数据很少)。我应该在我的数据网格加载完成后才显示div;而不是在此之前。
我正在寻找像datagrid完成onload的事件。 dojo.datagrid是否有任何事件?我没有在事件的dojo.Datagrid文档列表中看到它。
有没有办法检查dojo datagrid onload是否已完成?
有没有办法使用dojo.connect来处理这个?
如果我们有任何办法,请告诉我......
谢谢, 拉吉。
答案 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!
}