我正在使用Extjs 3.3.1
我有一个非常复杂的页面,我无法改变对象的初始化顺序。
在我的一个init函数中,我需要一个grid / store / combobox,但相应的ComponentMgr / StoreMgr为某个ID返回null,我知道它将在所有onReady脚本执行后可用。那么有没有一种方法可以推迟函数的执行,直到这些组件准备就绪,或者将它作为事件添加,并在这些组件准备好时触发它。我尝试将该函数添加到onReady事件中,但我猜它会立即执行,因为它已经处于就绪状态。
答案 0 :(得分:1)
我看到开箱即用的两个选项:
第二个选项的示例代码:
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
的内容。如果你想保留它,请告诉我,我会更新代码。
我知道这两种解决方案都不是那么干净,但最好的选择是重构你的代码而你说你做不到。