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
函数?是否可以发布您尝试过的代码?没有错误消息,只是不起作用,事件不会按我想要的顺序触发。