2011-05-18 86 views
3

我正在處理ExtJs 4,並在網格上出現雙擊事件時顯示模式窗口。ExtJs 4 - Window.show() - 窗口大小非常小

網格部件定義的監聽器:

"listeners": { 
    "itemdblclick": function() { 
     var win =Ext.getCmp('myCmp'); 
     win.myWindow.show(); 
    } 
} 

先前定義myCmp的屬性是一個窗口部件: (我使用父容器對象myCmp因爲我碼生成的JavaScript來構建ExtJS的配置)

myCmp.myWindow = Ext.create('Ext.window.Window',{ 
"layout": "fit", 
"items": [ 
....  
], 
"title": "Hello Window", 
"width": "300", 
"height": "300", 
"id": "myWindow" 
}); 

邏輯的效果很好,我雙擊網格,窗口對象存在(myCmp.myWindow),但是當我調用show()顯示該窗口非常小(6像素X 6像素) 。

如果我改變了處理程序:

Ext.create('Ext.window.Window',{ 
"layout": "fit", 
"items": [ 
....  
], 
"title": "Hello Window", 
"width": "300", 
"height": "300", 
"id": "myWindow" 
}).show(); 

它工作正常。顯然這是創建一個新的窗口實例。

任何想法?我正在做這個對嗎?

在此先感謝

SAM

回答

4

爲什麼你指的「myCmp」時,你可以直接引用到你的窗口?

var win = Ext.getCmp('myWindow'); 
win.show(); 

這應該工作。另外,爲什麼你實例化一個窗口,然後使用它?當你需要的時候創建一個實例並在使用後摧毀它會更好嗎?

此外,您應該正確配置窗口。寬度和高度是數字字段而不是字符串。請參閱api文檔和示例以瞭解如何正確配置對象。你應該使用以下窗口:

Ext.create('Ext.window.Window',{ 
    layout: 'fit', 
    items: [ 
    ....  
    ], 
    title: 'Hello Window', 
    width: 300, 
    height: 300, 
    id: 'myWindow' 
}).show(); 
+0

是的,很好的發現。高度和寬度的字符串是拼寫錯誤,真正的實現使用整數。回覆中的第一個方法的結果完全相同,但是你說的是,每次使用它時都應該創建並銷燬該窗口?我見過ExtJs的例子,它將窗口對象保留在var中並重用它,這就是爲什麼我認爲這是最佳實踐。 – sambomartin 2011-05-19 07:03:41

+1

你知道阿卜杜勒,他們是字符串,這是我在看的另一個對象。道歉和好點。謝謝。 – sambomartin 2011-05-19 07:09:05

+0

銷燬和重新創建取決於您的應用程序..您多久使用一次窗口?等等。我修改了代碼以顯示窗口以降低複雜性。錯字應該糾正了你的錯誤。 – 2011-05-19 07:11:23