2013-07-01 53 views
1

我有一個按鈕的表添加一個新的元素和行中的另一個編輯元素。這些操作共享相同的表單,唯一不同的是在編輯模式下填充表單。當用戶點擊按鈕時,窗體將顯示一個新窗口。是否可以在Extjs4的兩個不同的窗口中使用相同的窗體?

第一次,我點擊按鈕,例如,添加一個新的元素,工作正常。顯示錶格。但是...如果我關閉窗口,並嘗試編輯用戶,出現無內容的錯誤窗口並出現錯誤「TypeError:b is null」這是表單的定義問題嗎?窗口可能會刪除窗體?

我在一個VAR定義的形式:

var formPanel = Ext.create('Ext.form.Panel',{ 
    extend: 'Ext.form.Panel', 
    id: 'policyForm', 
    ... 

我對電網的TBAR一個按鈕來顯示窗口,以添加一個用戶和另一個按鈕要編輯的行他。這是該按鈕的處理程序:

handler : function(){ 
    Ext.create('Ext.window.Window',{ 
     layout: 'fit', 
     title: 'New Policy', 
     items: [formPanel], 
     width: 650, 
     height: 500, 
     id: 'myPolicyWindow' 
    }).show(); 
} 

回答

2

這很可能是您在面板和窗口代碼中已經設置這些id s的造成你無法重複使用相同的形式在不同的窗口。您應該儘量避免在Ext組件上使用id屬性,因爲ID應該是唯一的,它可能會導致類似這樣的問題。將itemId屬性與Ext.ComponentQuery一起使用,以允許在不使用Ext.getCmp(compId)的情況下獲取對組件的引用。

+0

謝謝你kevhender。我解決了它刪除ID的,定義一個自定義窗體,然後我爲我的窗口創建不同的實例。我不會再使用id屬性。無論哪種方式,如果您使用itemId設置元素,您如何調用它來獲取實例? – mannuk

+0

您將需要使用組件查詢按關係導航組件。當使用'itemId'時,在組件查詢中使用'#'符號:'parentCmp.down('#childCmpId')'。請參閱http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.ComponentQuery上的文檔。 – kevhender

+0

謝謝@kevhender。看起來像jquery :) – mannuk

1

我同意你不應該使用ID。但是,實際問題可能是您懷疑的:表單實例正在被破壞。這是因爲Ext.window.Window的默認closeAction是「銷燬」,這將消除任何子組件。將closeAction更改爲「隱藏」,或者與窗口的新實例一起創建表單面板的新實例。

+0

感謝您的回覆@existdissolve – mannuk

相關問題