论坛首页 AJAX版 EXT

新建了一个grid.还加了add按钮。但是为什么第一次弹出来有form元素,第二次却没有了呢?

浏览 844 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-12-11
为什么在第一次按add button时。有正常弹出窗口(里面有个form)。但关闭后,再第二次按add button时,窗口还是有弹出,但是里面form却任何元素都没有了,是不是我哪里写错了?

代码:

1.建立Add按钮在Grid的ToolBar中:
        // inline toolbars
        tbar:[{
            text:'Add',
            tooltip:'Add a new row',
            iconCls:'add',
			enableToggle: true,
			toggleHandler: function() {
				frmAdd.form.render();   
				var addWindow = new Ext.Window({   
							id: 'addwin',   
							layout:'fit',   
							width:800,   
							height:600,   
							plain: true,   
							items:frmAdd    //Load Add form.
						});   
				addWindow.show(this); 
			}


2.初始化弹出的form.
		var frmAdd = new Ext.FormPanel({   
                onSubmit: Ext.emptyFn,   
				xtype: 'form',
                submit: function() {   
                    this.getEl().dom.submit();   
                },   
                labelWidth: 75, // label settings here cascade unless overridden   
                frame:true,   
                title: '',  
                bodyStyle:'padding: 0',   
                width: 350,   
                labelSeparator:'',   
                items: [{
				 xtype:'datefield',   
                    fieldLabel: '日期',   
                    name: 'date',   
                    width: 100,   
                    allowBlank: false,   
                    format:'Y/m/d'  
				},{   
                    xtype:'textfield',   
                    fieldLabel: '备注',   
                    name: 'remark',   
                    width:300  
                } ],
				buttons: [{
						text: 'Save',
						handler: function() {
							alert('x');
						}
					}]
				});
   
最后更新时间:2007-12-11
Window 和 FormPanel 都不能重复创建。
   
0 请登录后投票
最后更新时间:2007-12-11
我加了以下代码,也是不行,也就是说,formPanel先生成出来,然后再次打开时就不再次生成了,
不知道加得对不对;

但我也问了一下老外,老外说在window.close时会把formpanel对象破坏掉,要再次生成。

究竟哪个是对呢?



var addWindow;

{
            text:'Add',
            tooltip:'Add a new row',
            iconCls:'add',
			enableToggle: true,
			toggleHandler: function() {alert(addWindow);
				//frmAdd.form.render();   
				if(!addWindow){
				var addWindow = new Ext.Window({   
							id: 'addwin',   
							layout:'fit',   
							width:800,   
							height:600,   
							plain: true,   
							items:frmAdd    //Load Add form.
						}); 
				}
				addWindow.show(this); 
			}
        }
   
0 请登录后投票
最后更新时间:2007-12-11
引用
window.close时会把formpanel对象破坏掉


Window对象加上下面的配置项,就不会破坏掉了:

closeAction : 'hide',
另外:

引用
if(!addWindow){ 
                 var addWindow = new Ext.Window({ 


写法不对,var addWindow是局部变量,应该去掉var, 并且必需先定义addWindow为私有属性。
   
0 请登录后投票
最后更新时间:2007-12-11
fangzhouxing 写道
引用
window.close时会把formpanel对象破坏掉


Window对象加上下面的配置项,就不会破坏掉了:

closeAction : 'hide',
另外:

引用
if(!addWindow){ 
                 var addWindow = new Ext.Window({ 


写法不对,var addWindow是局部变量,应该去掉var, 并且必需先定义addWindow为私有属性。


精辟,我终于知道closeAction : 'hide'这句是干嘛的了,以前一直照抄例子。原来实干这个的。
   
0 请登录后投票
最后更新时间:2007-12-11
谢谢楼上的DX们。现在用hide的话。的确是隐藏了整个FORM。但是我再次打开时。输入的值还在。

其实我想做到是每次按Add按钮,都会打开没有内容的新增的页面。

现在hide是隐藏起来了,那我想每次按add时都重新构造一次呢?

我现有的代码能做得到吗?

刚学extjs,请楼上的各位不要火。。。。;(...
   
0 请登录后投票
最后更新时间:2007-12-11
我试一下改成了这样,就可以实现我的功能啦。。哈哈。。

不过我想把frmAdd的初始化这一段移到外面去,写在里面太长太乱了,但应该怎么放到外面去呢?

tbar:[{
            text:'Add',
            tooltip:'Add a new row',
            iconCls:'add',
			enableToggle: true,
			toggleHandler: function() {

		/**
		 * Handler for Adding a Record
		 */
		var frmAdd = new Ext.FormPanel({ 
                onSubmit: Ext.emptyFn,   
				xtype: 'form',
                submit: function() {   
                    this.getEl().dom.submit();   
                },   
                labelWidth: 75, // label settings here cascade unless overridden   
                frame:true,   
                title: 'trying',  
                bodyStyle:'padding: 0',   
                width: 350,   
                labelSeparator:'',   
                items: [{
				 xtype:'datefield',   
                    fieldLabel: '日期',   
                    name: 'date',   
                    width: 100,   
                    allowBlank: false,   
                    format:'Y/m/d'  
				},{   
                    xtype:'textfield',   
                    fieldLabel: '备注',   
                    name: 'remark',   
                    width:300  
                } ],
				buttons: [{
						text: 'Save',
						handler: function() {
							alert('x');
						}
					}]
				});
		
			frmAdd.form.render();   
			
				//if(!addWindow){
				var addWindow = new Ext.Window({   
							id: 'addwin',   
							layout:'fit',   
							width:800,   
							height:600,   
							plain: true, 
							closeAction : 'close',
							items:frmAdd    //Load Add form.
						}); 
				//}
				addWindow.show(this); 
			}
   
0 请登录后投票
最后更新时间:2007-12-12
效果是可以了。但为什么第一次弹出来的框口元素对不齐的?

但第二次按ADD,再弹出来时就已经全部对齐了。。。

是不是哪里写错了?

以下是FORM的初始化函数:

	function InitFrmAdd()
	{
		/**
		 * Handler for Adding a Record
		 */
		var frmAdd = new Ext.FormPanel({ 
                onSubmit: Ext.emptyFn,   
				xtype: 'form',
                submit: function() {   
                    this.getEl().dom.submit();   
                },   
                labelWidth: 75, // label settings here cascade unless overridden   
                frame:true,   
                title: 'trying',  
                bodyStyle:'padding: 0',   
                width: 350,   
                labelSeparator:'',   
                items: [{
				 xtype:'datefield',   
                    fieldLabel: '日期',   
                    name: 'date',   
                    width: 100,   
                    allowBlank: false,   
                    format:'Y/m/d'  
				},{   
                    xtype:'textfield',   
                    fieldLabel: '备注',   
                    name: 'remark',   
                    width:300  
                } ],
				buttons: [{
						text: 'Save',
						handler: function() {
							alert('x');
						}
					}]
				});
			
			frmAdd.form.render();   

			return frmAdd;
	}
   
0 请登录后投票
论坛首页 AJAX版 EXT

跳转论坛:
JavaEye推荐