2011-05-18 59 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