2009-10-27 50 views
0

我有一個基本佈局,其中可以使用樹視圖選擇不同的組件,然後在主面板中進行渲染。這對我的所有組件(如網格)都適用,但會出現與窗體有關的問題。extjs窗體不會在第二次選中時在面板中呈現

第一次選擇一個表單就可以了,只要你試圖再次選擇它,沒有任何東西被渲染。

該演示在這裏可用,並有一個鏈接到頁面頂部的JavaScript。

http://www.somethingorothersoft.com/ext

組件的選擇發生在selectNode功能,我已經試過各種方法,我可以沒有太多的結果。

編輯正如Jim Barrows指出的那樣,最好在create函數中實例化一個組件。我一直在猶豫,因爲這是我真正的應用程序中的一個相當大的變化,我想實際保持實例以便於它們之間的導航。

現在,我已經寫了這個,我意識到,做正確的狀態我就會不管它存儲在服務器上的情況下,瀏覽器導航到另一個頁面......

編輯我所做的改變實例總是像這樣的形式,它更extJSy現在:):

components['Form1'] = { xtype:'form', "items": [ 
{ "name": "Rep_ID", "allowBlank": false, "fieldLabel": "Rep" }, 
{ "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" }, 
{ "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}], 
"defaults": { "xtype": "textfield" } 
}; 

components['Form2'] = { xtype: 'form', "items": [ 
{ "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" }, 
{ "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}], 
"defaults": { "xtype": "textfield" } 
} 

回答

0

你的問題是在這裏:

var selectNode = function(node) { 

    node.select(); 
    node = node.attributes; 
    var newpanel = components[node.component].create(); 
    var cp = Ext.ComponentMgr.get('center_panel'); 
    cp.setTitle(node.text, node.icon); 

    newpanel.hideMode = 'visibility'; 
    newpanel.hide(); 
    cp.removeAll(); 
    cp.add(newpanel); 
    cp.doLayout(); 
    newpanel.show(); 
}; 

在這裏:

create: function() { return this; } 

cp.removeAll()事實上確實摧毀所有組件。所以當創建被調用時,沒有這個返回,所以沒有顯示。視口組件會自動銷燬任何已刪除的內容,並且面板繼承此功能。您可以將autoDestory設置爲false,也可以在創建中創建一個新的。

+0

這不完全正確,但更接近解決方案。 'return this'總是返回一個有效的對象,但是它的狀態以某種方式搞砸了。如果我將autoDestroy設置爲false,我仍然得到這個問題,而不是沒有出現任何表單,它會是第一次呈現的最後一個表單。 – 2009-10-28 00:38:02

相關問題