2009-09-17 23 views
2

我有一個從我的視口的Ext西面板,我有一個按鈕上的處理程序,首先從西部刪除所有元素,然後廣告另一個元素,然後做一個doLayout()。所以這個功能在點擊按鈕時會做三件事。在完成所有3個任務後,點擊按鈕並取消屏蔽後,我想向西面板添加一個遮罩。ExtJS掩碼面板,而行動

這裏是面板:

{ 
       region: 'west', 
       id: 'west-panel', 
       title: 'West', 
       split: true, 
       width: 200, 
       minSize: 175, 
       maxSize: 400, 
       collapsible: true, 
       margins: '0 0 0 5', 
       layout: 'fit' 
       items: [leftMenu] 
      } 

這是我做的任務:

west.removeAll(); 
west.add(indexHeaderPanel); 
west.doLayout(); 

這可能嗎?如果提問,我會提供更多信息。謝謝。

回答

12

你在字面上只是做了mask(),然後在你的代碼塊之前和之後unmask()。如果代碼中的某些內容異步執行,那麼您只需確保在適當的回調中完成了解除屏蔽。舉個例子:

buttons: [{ 
     text: 'Refresh West Panel', 
     handler: function(){ 
      var w = Ext.getCmp('west-panel'); 
      w.getEl().mask(); 
      w.removeAll(); 
      w.add(indexHeaderPanel); // assuming you have this ref! 
      w.doLayout(); 
      w.getEl().unmask(); 
     } 
    }] 

如果你的邏輯執行得足夠快,你永遠不會看到屏蔽。爲了驗證它的工作原理,你可以把在測試延遲:

buttons: [{ 
     text: 'Foo', 
     handler: function(){ 
      var w = Ext.getCmp('west-panel'); 
      w.getEl().mask(); 

      // do whatever 

      (function(){ 
       w.getEl().unmask(); 
      }).defer(1000, this); 
     } 
    }] 

w.getEl()(聯合國)面膜()會掩蓋整個面板(包括頁眉/頁腳)。要僅屏蔽內容,請執行w。 body。[un] mask()。