执行顺序,延迟,重新安排功能

时间:2011-11-17 09:38:46

标签: javascript extjs

我正在使用Extjs 3.3.1

我有一个非常复杂的页面,我无法改变对象的初始化顺序。

在我的一个init函数中,我需要一个grid / store / combobox,但相应的ComponentMgr / StoreMgr为某个ID返回null,我知道它将在所有onReady脚本执行后可用。那么有没有一种方法可以推迟函数的执行,直到这些组件准备就绪,或者将它作为事件添加,并在这些组件准备好时触发它。我尝试将该函数添加到onReady事件中,但我猜它会立即执行,因为它已经处于就绪状态。

1 个答案:

答案 0 :(得分:1)

我看到开箱即用的两个选项:

  • 放置一个将在最后一个准备回调中调用init函数的函数
  • 您可以创建一个计时器来检查对象何时准备就绪。

第二个选项的示例代码:

function myInitFunction() {
    // some code that doesn't need the component... if any

    executeWhenReady('componentId', executeCodeWhichNeedsComponent);

    function executeCodeWhichNeedsComponent(component) {
        // this is just the code where you actually need the component
        // an example:
        component.addChild(new ChildComponent);
        component.show();
        // etc...
    }
}

function executeWhenReady(cmp, fn) {
    if (! Ext.get(cmp)) {
        setTimeout(function() { executeWhenReady(cmp, fn); }, 20);
    } else {
        fn(Ext.get(cmp));
    }
}

我只想在executeCodeWithComponent内添加你不会有this的内容。如果你想保留它,请告诉我,我会更新代码。

我知道这两种解决方案都不是那么干净,但最好的选择是重构你的代码而你说你做不到。