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~