2011-06-13 31 views
1

在一個文件中,我創建了一個帶有兩個選項卡的選項卡面板。我正在嘗試註冊組件以在單獨的文件中使用。考慮以下內容:ExtJS 3.2.1註冊組件用於xtype

Ext.ns('DVI'); 

var backtestTab = { 
    xtype: 'groupingstore' 
} 

var intradayTab = { 
    xtype: 'groupingstore' 
} 

DVI.DviDashboard = new Ext.TabPanel({ 
    activeTab: 0, 
    items: [backtestTab, intradayTab] 
}); 

Ext.reg('dviDashboard', DVI.DviDashboard); 

假設此頁面正確地使用分組存儲區填充選項卡。在調用此腳本的頁面,代碼如下:

var dashboard = { 
    xtype: 'tabpanel', 
    id: 'port_dash-panel', 
    activeTab: 0, 
    items:[{ 
     title: 'Dashboard', 
     xtype: 'dviDashboard' 
    }] 
}; 

它返回以下錯誤:

b[d.xtype || e] is not a constructor 

經研究,上面的錯誤指示組件無法找到或沒有定義。

不過請注意,下面的代碼不工作,並呈現一個tabpanel:

var dashboard = { 
    xtype: 'tabpanel', 
    id: 'port_dash-panel', 
    activeTab: 0, 
    items:[DVI.DviDashboard] 
}; 

我只顯示snipits。儀表板選項卡面板呈現在視口中。

我想第一個問題是我可以用這種方式註冊一個組件嗎?當然,第二個問題是,爲什麼這不起作用? :)

回答

2

您正試圖註冊一個實例化的對象,這將無法正常工作。 Ext.reg通常使用由Ext.extend方法創建的組件。

DVI.DviDashboard = Ext.extend(Ext.TabPanel,{ 
    initComponent: function(){ 

    Ext.apply(this, { 
     activeTab: 0, 
     items: [backtestTab, intradayTab] 
    }); 

    DVI.DviDashboard.superclass.initComponent.call(this) 
} 
}); 

Ext.reg('dviDashboard', DVI.DviDashboard); 

這裏是分機關於寫作班的老但有用的鏈接3. *: http://blog.extjs.eu/know-how/writing-a-big-application-in-ext/