Extjs4 如何在展开之前等待ExtJS面板渲染?

Extjs4 如何在展开之前等待ExtJS面板渲染?,extjs4,panel,expand,Extjs4,Panel,Expand,我有一个infoContainer扩展了extjs4.0.7中的Ext.panel.panel,其中包含以下属性(仅显示相关属性): 可折叠:正确 真的吗 残疾人士:对 forceLayout:对 我有一些修改(一些渲染)要应用于组件(如文本字段、复选框等),所以我在面板的beforexpand中执行此操作。但是,当面板展开时,我们可以清楚地看到面板可见后组件上的修改。所以,在我们看到面板打开之前,我需要这个逻辑是完整的 因此,我是否可以限制面板的展开,使其仅在beforeexpand的逻辑

我有一个
infoContainer
扩展了extjs4.0.7中的
Ext.panel.panel
,其中包含以下属性(仅显示相关属性):

  • 可折叠:正确
  • 真的吗
  • 残疾人士:对
  • forceLayout:对
我有一些修改(一些渲染)要应用于组件(如文本字段、复选框等),所以我在面板的
beforexpand
中执行此操作。但是,当面板展开时,我们可以清楚地看到面板可见后组件上的修改。所以,在我们看到面板打开之前,我需要这个逻辑是完整的


因此,我是否可以限制面板的展开,使其仅在
beforeexpand
的逻辑完成时发生?如何做到这一点?

以下是我将如何做到这一点:

创建一个函数,该函数执行当前希望在
beforeexpand
事件上出现的呈现/修改逻辑

在此函数中,在面板上设置自定义属性,以便您知道它是根据您的逻辑呈现/修改的,例如
myPanel.isPrepared=true

另外,在这个函数的最后,再调用
myPanel.expand()

然后,在
beforeexpand
处理程序中放置一个条件,用于检查渲染/修改是否已完成,例如,
if(myPanel.isPrepared){…

如果通过,则不在处理程序中执行任何操作,并让面板展开

如果未通过,则调用上述函数,然后
返回false;
这将阻止面板展开,您的函数将执行所需的渲染/修改,完成后将调用expand

假设您没有使用MVC模式创建应用程序,则处理程序和函数可能如下所示:

myPanel.on('beforeexpand`, function() {
    if (!myPanel.isPrepared) {
        prepareMyPanel();
        return false;
    }
})

function prepareMyPanel() {
    // rendering / modification logic here...
    myPanel.isPrepared = true;
    myPanel.expand();
}

如果您使用MVC模式创建应用程序,您应该能够将其转换为正确的控制器处理程序。

渲染逻辑是否需要在每次面板展开时都有所不同?还是在应用程序加载后只需要一次?一次,面板第一次展开。我理解这个答案背后的逻辑,这是非常好的解释过,尝试过很多种方法,但对我来说都不起作用。@elbaid您是否收到任何类型的错误消息?是否调用了
prepareMyPanel
函数?是否可以发布您尝试过的代码?没有错误消息,只是不起作用,事件不会按我想要的顺序触发。