1

我在 ExtJS 4.0.7 中infoContainer扩展了具有这些属性的一个(仅显示相关):Ext.panel.Panel

  • 可折叠:真
  • 崩溃:真
  • 禁用:真
  • 强制布局:真

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

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

4

1 回答 1

3

这是我的做法:

创建一个执行您当前希望在beforeexpand事件上发生的渲染/修改逻辑的函数。

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

此外,在此函数的最后,再次调用myPanel.expand();

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

如果它通过了,那么不要在处理程序中做任何事情,让面板展开。

如果它没有通过,则调用上面提到的函数,然后return 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 模式创建应用程序,您应该能够将其转换为正确的控制器处理程序。

于 2012-06-22T17:53:10.947 回答