【问题标题】:how to check dojo.datagrid loading completed? [duplicate]如何检查 dojo.datagrid 加载完成? [复制]
【发布时间】:2011-07-23 07:05:10
【问题描述】:

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

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

我正在为数据网格寻找类似 onload 完成的事件。 dojo.datagrid 有什么活动吗?我在活动的 dojo.Datagrid 文档列表中没有看到它。

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

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

如果我们有任何方法可以做到这一点,请告诉我...

谢谢, 拉吉。

【问题讨论】:

    标签: dojo onload dojox.grid.datagrid


    【解决方案1】:

    正如亚历克斯已经指出的那样,您可以对(不幸的)私人_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...    
        });
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        你可以设置一个定时器来检查数据是否加载,每隔一秒左右运行一次,直到加载完成(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!
        }
        

        【讨论】:

          【解决方案4】:

          datagrid 本身实际上从未加载所有可用数据,它仅显示其存储中数据的子选择。

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

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

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

          【讨论】:

          • 这在 1.8 中对我不起作用。是否必须在网格启动后进行提取?我在创建网格时传递了查询,例如“query:{toUserId:self._userId}”,所以我不需要调用 fetch。我暂时使用下面的方面解决方案。
          • 这在增强的网格中是否有效....我使用的是 dojo 1.10 版本
          猜你喜欢
          • 2011-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多