2012-06-22 71 views
1

我有一个infoContainer延伸ExtJS的4.0.7一个Ext.panel.Panel具有这些性能(唯一相关示出):如何在扩展之前等待ExtJS Panel渲染?

  • 可折叠:真
  • 折叠:真
  • 禁用:真
  • forceLayout:真

我对组件(如文本框,复选框等)进行了一些修改(某些渲染),所以我在面板的beforeexpand。但是,当面板展开时,我们清楚地看到面板可见后对组件的修改。所以,我需要这个逻辑完成之前我们看到面板打开。

那么,我可以限制面板的扩展只发生在beforeexpand的逻辑完成时吗?以及如何做到这一点?

+0

每次该面板扩展时,渲染逻辑是否需要不同?或者它只是在应用程序加载后一次? – Geronimo

+0

有一次,小组第一次扩大。 – elbaid

回答

3

这里是我会怎么做:

创建做这您当前要在beforeexpand事件发生在渲染/修改逻辑功能。

在这个函数中,在面板上设置一个自定义属性,这样你就会知道它是根据你的逻辑进行渲染/修改的。 myPanel.isPrepared = true;

此外,在这个函数的最后做另一个呼叫myPanel.expand();

然后,在beforeexpand处理程序把一个条件来检查,如果你的渲染/修改已经完成例如,if (myPanel.isPrepared) {...

如果通过,然后不要在处理程序中做任何事情,并让面板扩展。

如果是的话那么通拨打上面提到的功能,然后return false;,将停止从扩大面板,你的函数会做你想要的需要渲染/修改,然后它会调用扩展当它全部完成。

假设你不与MVC模式创建的应用程序的处理程序和函数可以是这个样子:

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

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

如果要创建与MVC模式的应用程序,你应该可以说在翻译到正确的控制器处理程序。

+0

我理解这个答案背后的逻辑,并且很好地解释了这一点,尝试了很多方法,但对我来说却行不通。 – elbaid

+0

@elbaid你是否收到任何类型的错误信息? “prepareMyPanel”函数是否被调用?你可以发布你试过的代码吗? – Geronimo

+0

没有错误消息,只是不工作,事件不会按照我的意愿解雇。 – elbaid

相关问题