2012-12-11 55 views
0

我正在嘗試創建一個組件並在控制器中訪問它。但是,通過id訪問組件時,它不會返回組件。它總是返回undefined。請在代碼下方找到。Ext.getCmp在ExtJS4中不工作

在這裏輸入的代碼

//Component creation in view layer as below 

Ext.define('MyApp.view.performance.grid.IFrameGridCmp', { 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.crMainPanel', 
    id:'mainPanelId', 
    layout: { 
     align: 'stretch', 
     type: 'vbox' 
    }, 
    border:0, 
    resizable: false, 
    forceFit: true, 
    autoWidth: true, 
    initComponent: function() { 
     Ext.apply(this, { 
      items: [ 
       { 
        xtype:'panel', 
        flex:.02, 
        border:0 
       }, 
       { 
        xtype:'crHeaderPanel', 
        flex:.05 
       }, 
       { 
        xtype: 'crUpperPanel', 
        flex: 0.93 
       }, 
       Ext.create('Ext.Component', { 
        autoEl: { 
         tag: 'iframe', 
         cls: 'x-hidden', 
         src: Ext.SSL_SECURE_URL 
        }, 
        id:'FileDownloader', 
        height:0, 
        listeners: { 
         afterrender: function() { 
          this.getEl().on('load', function() { 
           console.log('loaded download frame'); 
          }); 
         } 
        }, 
        load: function(config){ 
         var e = this.getEl(); 
         e.dom.src = config.url + (config.params ? '?' + Ext.urlEncode(config.params) : ''); 
         e.dom.onload = function() { 
          Ext.getBody().unmask(); 
          if(e.dom.contentDocument.body.childNodes[0].wholeText == '404') { 
           Ext.Msg.show({ 
            title: 'Attachment missing', 
            msg: 'The document you are after can not be found on the server.', 
            buttons: Ext.Msg.OK, 
            icon: Ext.MessageBox.ERROR 
           }); 
          } 
         }; 
        } 
       }) 
      ] 
     }); 
     this.callParent(arguments); 
    } 
}); 

======================================== 

    enter code here 

//Accessing the controller as below in controller 

views: ['performance.grid.IFrameGridCmp'], 

//The below line gives error 
var downloader = Ext.getCmp('FileDownloader'); 
      downloader.load({ 
       url: '/APXUI/data/json/xls?exportData='+Ext.JSON.encode(records) 
      }); 

回答

2

那麼,是不是在你調用Ext.getCmp()

注意時間views: ['performance.grid.IFrameGridCmp'],僅僅是一種結合該視圖控制器,這意味着創建的視圖控制器將爲您創建一個吸氣器,僅此而已。您仍然需要通過調用.create();Ext.widget('crMainPanel')

0

在您使用控制器控制例如處理它實例化視圖:

me.control({ 
    'crMainPanel #FileDownloader': { 
     afterrender: me.addDownloader 
    } 
}); 

不要使用Ext.getCmp()這實在是太慢了,你會有很多問題。 不要使用id - 更好地使用itemId。 爲什麼你需要從控制器調用它?

+2

getCmp一點也不慢,實際上它可能是查找除了直接引用之外的組件的最快方法。但是,我同意最好避免在大型應用程序中使用它們。 –

+0

是的,你是正確的,關於速度:)我沒有使用它,在我的腦海慢 - 一般。該視頻可以描述爲什麼不需要使用。 http://vimeo.com/14816550 – Psycho

+0

我猜@EvanTrimboli會知道這是核心開發人員之一;-) – sra