Ext与后台(二)

[size=small]
上一篇中提到了列表显示、增加、删除。这篇说下修改和条件查询。
转载请注明出处:http://simplehumn.iteye.com/blog/486269
2.2修改
第一种方式
先贴代码
tbar里的items这样写的
......
{
	text:'<img src="/lncrm/resources/images/img/cog_edit.png"/>修改'	,
	tooltip : '修改会期',
	handler : hqUpdate
}
......

hqUpdate方法,弹出窗口并初始化数据
//修改会期
var hqUpdate = function(){
	var record = sm.getSelected();
	if(record&&sm.getCount()==1){
		form = dhhhqWindow(record,"update");
		form.getForm().reset();
	    form.getForm().loadRecord(record);//修改时带入数据
	}else{
		Ext.Msg.alert('友情提示','您必须且只能选择一行数据以便进行办理!');
	}
}

窗口写成一个function,利于对象的销毁和创建,方法里传了2个参数,做判断或提交验证(数据库层),关于界面的allowBlank:false验证不多说,网上很多例子。最后附上弹出窗口的图片附件。
var widthValue = 150;
var nowYear = new Date().getYear();
// 日期范围代码
Ext.apply(Ext.form.VTypes, {
	daterange : function(val, field) {
		var date = field.parseDate(val);

		// We need to force the picker to update values to recaluate the
		// disabled dates display
		var dispUpd = function(picker) {
			var ad = picker.activeDate;
			picker.activeDate = null;
			picker.update(ad);
		};

		if (field.startDateField) {
			var sd = Ext.getCmp(field.startDateField);
			sd.maxValue = date;
			if (sd.menu && sd.menu.picker) {
				sd.menu.picker.maxDate = date;
				dispUpd(sd.menu.picker);
			}
		} else if (field.endDateField) {
			var ed = Ext.getCmp(field.endDateField);
			ed.minValue = date;
			if (ed.menu && ed.menu.picker) {
				ed.menu.picker.minDate = date;
				dispUpd(ed.menu.picker);
			}
		}
		/*
		 * Always return true since we're only using this vtype to set the
		 * min/max allowed values (these are tested for after the vtype test)
		 */
		return true;
	}
});
//新增或修改会期弹出窗口
var dhhhqWindow = function(record,update){
	//会期信息
	var hqInfo = new Ext.form.FieldSet({
		title: '会期信息',
        collapsible: true,
        autoHeight:true,
        bodyStyle:'width:100%;',
        labelWidth : 100,
		labelAlign : 'right',
        items:[{
			layout:'column',//从左往右的布局				
			items:[{
				columnWidth:.5,
				layout:'form',
				//labelWidth : 60,
				items:[{
					xtype : 'textfield',
					fieldLabel : '会期编号',
					allowBlank : false,
					name : 'dhhhqCommonId',
					width : widthValue
				},{      
					xtype : "datefield",  
					id:'dhhhqStartDate',
					name : 'dhhhqStartDate',
					fieldLabel : "会期开始日期",
					emptyText : 'YYYY-MM-DD',
					allowBlank : false,
					width : widthValue,
					vtype : 'daterange',
					format : 'Y-m-d', // 指定日期格式,年-月-日
					endDateField : 'dhhhqEndDate'
				}]
			},{
				columnWidth:.5,
				layout:'form',
				//labelWidth : 60,
				items:[{
					xtype : 'textfield',
					fieldLabel : '会期名称',
					allowBlank : false,
					name : 'dhhhqName',
					width : widthValue
				},{      
					xtype : "datefield",  
					id:'dhhhqEndDate',
					name : 'dhhhqEndDate',
					fieldLabel : "会期结束日期", 
					allowBlank : false,
					emptyText : 'YYYY-MM-DD',
					width : widthValue,
					format : 'Y-m-d', // 指定日期格式,年-月-日
					// value:new Date(), //默认当前时间
					vtype : 'daterange',
					startDateField :'dhhhqStartDate'
				}]
			}]
		},{
			layout:'column',//从左往右的布局				
			items:[{
				columnWidth:.6,
				layout:'form',
				items:[{
					xtype : 'textarea',
					fieldLabel : '会期说明',
					name : 'dhhhqDescribe',
					regex:/^.{0,100}$/,
					regexText:'会期说明不超过100字',
					width : 350
				}]
			},{
				columnWidth:.3,
				layout:'form',
				items:[{
					html : '(会期说明不超过100字)'
				}]
			}]
		}]
	});
	
	// 弹出窗口“订货会会期”的按钮集合
	var hqButtons = [{
		xtype : 'submit',
		text : '修改',
		handler : function() {
			if(dhhhqForm.getForm().isValid()){
				dhhhqForm.getForm().submit({ 
					url:'../../om/dhhDate.do', 
					params:{method:'saveOrUpdateDhhDate'}, 
					method:'post', 
					waitMsg:'正在保存,请稍等...', 
					success:function(form,action){ 
						  hqWindow.destroy();
						  Ext.Msg.alert("友情提示","保存目标成功!",
								function(){
									hqStore.reload();
								},this
							);
					}, 
					failure:function(form,action){
						Ext.MessageBox.alert("友情提示", "服务器出现错误请稍后再试!");
					} 
				}); 
			}
		}
	}, {
		text : '取消',
		handler : function() {
			hqWindow.destroy();
		}
	}];
	
	var dhhhqForm = new Ext.FormPanel({
		bodyStyle : 'padding:5px',
		frame : true,
		name : 'dhhhqForm',
		layoutOnTabChange : true,
		autoHeight : true,
		autoWidth : true,
		labelWidth : 100,
		labelAlign : 'right',
		items : [hqInfo]
	});
	
	// 将表单放到一个窗口中,并显示
	var hqWindow = new Ext.Window({
		title : "会期信息",
		width : 850,
		height : 420,
//		autoHeight : true,
		autoScroll : true,
		collapsible : true,
		maximizable : true,
		layout : 'fit',
		modal : true,
		items : [dhhhqForm]
	});

	hqWindow.show();
	return dhhhqForm;
};

说明:
Ext.apply(Ext.form.VTypes, {
daterange : function(val, field) {。。。。。。});
这段的意思是,让日期控件可以控制2个日期“开始日期”不小于“结束日期”,使用方法如"会期开始日期"、"会期结束日期"。
修改时初始化的数据是显示grid列表时和json串一起传到前台,var record = sm.getSelected();这样选中这行把record带入弹出窗口就能初始化。grid的store里可以传你想要的任何数据,也就是说 (var hqStore = new Ext.data.JsonStore({fields:[......]});)数据里的fields的项数可以比(var cm = new Ext.grid.ColumnModel([......]);)表头的项数多,修改时初始化的数据都应经在界面的grid里了。

第二种方式
上面的这种方法是,查询时把数据以json形式都传到前台grid的store里,然后修改或查看详情时,不再查询数据库,直接从界面拿数据。
但是这种方法有时候不能满足业务需求,下面介绍另一种方式:打开弹出窗口时,调后台方法初始化数据。
修改按钮有所改变,加了一个hqForm.load({......})
var dhhButton = [{
	xtype : 'submit',
	text : '修改',
	handler : function() {
		if(selectDhhForm.getForm().isValid()){
			dhhWindow.destroy();
			var dhhId = selectDhhForm.form.findField('javaid').getValue();
			var hqForm = dhhhqWindow();
			hqForm.load({
				url : '../../om/dhhDate.do?method=initDhhDate&dhhId='+ dhhId,
				waitMsg : '正在载入数据,请稍等...',
				method:"get",
				success:function(form,action){},
				failuer : function(){
					 Ext.Msg.alert('友情提示', '数据加载失败请重试!');
				}
			});
		}
	}
}];

弹出窗口的formpanel也有所变化
var dhhhqForm = new Ext.FormPanel({
	bodyStyle : 'padding:5px',
	frame : true,
	name : 'dhhhqForm',
	layoutOnTabChange : true,
	autoHeight : true,
	autoWidth : true,
	labelWidth : 100,
	labelAlign : 'right',
	reader : new Ext.data.JsonReader({
        root:'root'
    }, [
    	{name: 'dhhId', mapping:'dhhId'},
        {name: 'commonId', mapping:'commonId'},
        {name: 'brand', mapping:'brand'},
        {name: 'dhhStartDate', mapping:'dhhStartDate'},
        {name: 'dhhEndDate', mapping:'dhhEndDate'},
        {name: 'name', mapping:'name'},
        {name: 'area', mapping:'area'} 
    ]),
	items : [hqInfo]
});

多了个reader : new Ext.data.JsonReader({}),reader里的值就是界面想要的值,后台以json串形式发过来,这里按照这种格式接收就OK了。

2.3查询
这里的查询是指,界面输入或选择一些条件,然后点击查询按钮,显示符合条件的数据。至于条件跟formpanel差不多,点击按钮的时候也是提交form,这里不在写查询条件的代码。在完成grid列表以后,只需修改一小部分就可以实现查询功能。
以下是查询按钮,hqStore.removeAll();先清掉grid数据,hqStore.baseParams 查询时的参数都写在这里(参考yourgame在javaeye里的一段回复),hqStore的URL里不带任何参数,然后hqStore.reload({params:{start:0,limit:10}});好了到这里查询就OK了,只刷新grid数据界面无刷新。hqStore.baseParams 是关键。
new Ext.Button({
	text : '查询',
	minWidth : 60,
	handler : function() {
		hqStore.removeAll();
		// 查询时传参数要用这种方式,否则翻页的时候这些参数无效
		hqStore.baseParams = {departmentarea : Ext.get('departmentarea').getValue(),status : Ext.get('status').getValue(),status : Ext.get('status').getValue(), dhhYear : Ext.get('dhhYear').getValue(), javaid : Ext.get('javaid').getValue()  }; 
		hqStore.reload({params:{start:0,limit:10}});
	}
})

说明:hqStore.baseParams 里面,前面那个是参数名称name,冒号后面的是值value,多个参数以逗号分开。
[/size]

你可能感兴趣的:(json,Blog,ext)