Extjs 4.1 - 如何等待组合中的所有商店被加载

Posted

技术标签:

【中文标题】Extjs 4.1 - 如何等待组合中的所有商店被加载【英文标题】:Extjs 4.1 - How to wait all store in combo is loaded 【发布时间】:2013-07-30 08:47:04 【问题描述】:

我有一个窗口包含许多默认 autoload = false 的组合。我想等待窗口中的所有组合都加载完毕,然后我会显示类似的窗口

  var arrCombos = window.query('combo');
  Ext.each(arrCombos, function(combo)
     combo.getStore().load(); // load
  );

  WaitForFunction(arrCombos); // wait for loading done

  window.show(); // show my window

这是我的WaitForFunction

 function WaitForFunction(arrCombos) 
    var all = 1;
    Ext.each(arrCombos, function(combo) 
        if (combo.store.isLoading()) 
            all = 0;
        
    );
    if (all == 0)
        setTimeout(WaitForFunction(arrCombos), 100);
    

但是失败了,那说too much recursion 我该怎么做谢谢。

【问题讨论】:

setTimeout(WaitForFunction(arrCombos), 100) 立即调用WaitForFunction 并将返回值传递给setTimeout。你的意思是:setTimeout(function() WaitForFunction(arrCombos) , 100)。我认为您的代码会以这种方式工作...但是 sra 基于事件和计数器的方法更好,因为它不会等待任何不需要的毫秒。 @rixo 是的,谢谢。我的代码运行了,但运行不正常:) 我使用 sra 的代码,它很好 【参考方案1】:

又快又脏,但这样的东西应该可以工作:

var arrCombos = window.query('combo'),
    storeCt = 0;

function checkState() 
  if(--storeCt == 0)
    window.show();


Ext.each(arrCombos, function (combo) 
  var store = combo.getStore();
  storeCt++;
  store.on('load', checkState, this, single: true)
  store.load(); // load
);

【讨论】:

以上是关于Extjs 4.1 - 如何等待组合中的所有商店被加载的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4.1 如何选择组合中的第一项

如何在 ExtJS 4.1 中禁用网格中的某些行

Extjs 4.1 - 如何将数据从商店加载到另一个商店

如何在 ExtJS 4.1 中销毁商店?

Extjs - 如何填充组合框形成一个单一的商店?

如何解决 ExtJS 4.1 Combobox pageSize 的 bug?