Extjs 4.1中有关创建Window的若干技术点

利用Extjs开发web应用程序,会经常用到Extjs.window.Window,在创建的此对象的时候,本人经历了几个波折,最终基本上算是搞清了有关写法的区别,现保存下来,共享给读者,也供自己查阅之用。

语句1.

var control = Ext.ComponentManager.create(this.control);

参数:this.control可以为对象配置参数,也可以是这个对象本身。

语句2.

若用Extjs.create方式创建window,如以下代码:

1 this.setSelfWindow(
2             Ext.create("DCIS.uploadfiles",{
3                 width: 500,
4                 height: 300,
5                 title: 'File Upload Form'
6            }));

那么创建完成后,点击关闭此窗体时,对象并没有销毁,只是其中的dom部分(即protoEl属性为空)被销毁了。在此情况下,若想要再次创建此对象,那么由于此对象以及存在,所以系统会将原来缺少dom的对象重新拿来,但是再次对其dom添加样式时会报错(最通俗的描述就是:一个窗体,第一次打开没问题,第二次打开时会报:【'addCls' 为空或不是对象】错误)。因此,针对这种情况,(目前)有3种解决办法:

第一种:将window窗体的close事件中修改为:this.hide();即不让系统销毁其dom。

第二种:添加创建窗体的配置参数closeAction:'hide',原理和第一种方法相同。

第三种:不直接利用第一、第二种方法创建对象,而是像窗体部分传递参数,由单独的窗体部分的代码创建新对象实例。例如以下代码:

1 //编辑流程
2         this.setFlowWindow({
3             xtype: "flowgrid",
4             height: 340,
5             width: 700,
6             title: "审批流程明细",
7             columns: 2,
8             store: this.getBaseInfoStore()
9         });

然后,创建处代码可以为:

1 var control = Ext.ComponentManager.create(this.control);
2         var result = control.setOperationType("update");
3         if (result == true) {
4             control.show();
5         }

这样,就可以解决问题。用了一段extjs,感觉这个框架还是很有个性的。O(∩_∩)O~

posted @ 2012-06-20 17:48  Shapley  阅读(1026)  评论(0编辑  收藏  举报