日期:2014-05-16 浏览次数:20452 次
原始需求:
1)有一个两级级联的表格:分组与规则,一个分组下可以有多个规则;
2)保存时要统一保存,也就是不能添加一个分组或规则就保存一下,而要到最后点击保存按钮时,把本次所有的修改一次性的提交了。
分析:
1) 保存时分组与规则必须关联起来。否则,如果新加两个或多个分组时,新加分组下的规则,因新加分组都没有Id,这些规则会没有办法区分自己属于哪个分组。如新增分组:[{id:’’,name:’分组1’},{id:’’,name:’分组2’}],它们下级的规则就无法通过分组id区分分组。
2) 为了解决上面新加多个分组时,区分规则与分组的对应,我把规则直接处理分组的下一级进行提交。再后台解析时,因规则直接与分组对应,也不会造成分组与规则的对应混乱。
实现:
Js关键代码:
var alarmGroups = alarmGroupStore.getRange();//.getModifiedRecords(); 因为规则有变动时,分组可能没有修改,所以必须用全部分组,而且我知道分组的数量不会大,无须优化 var alarmFormulaStore = this.getStore('alarm.AlarmFormula'); var alarmFormul_modified = alarmFormulaStore.getModifiedRecords(); for(idx=0;idx<alarmGroups.length;idx++){ rec=[];arrFormula=[]; groupId = alarmGroups[idx].get('id'); rec.push(groupId); rec.push(alarmGroups[idx].get('name')); rec.push(alarmGroups[idx].get('isDefault')); // 报警规则,这个地方只处理变动的规则就可以了,不变的不管了,删除的单独处理 Ext.Array.each(alarmFormul_modified, function(formula){ if(formula.get('alarmGroupId')==groupId){ recFormula=[]; recFormula.push(formula.get('id')); recFormula.push(formula.get('name')); recFormula.push(formula.get('content')); recFormula.push(formula.get('background')); recFormula.push(formula.get('foreground')); recFormula.push(Ext.isNumeric(formula.get('serial'))?formula.get('serial'):1); recFormula.push(formula.get('isValid')=="1"?true:false); recFormula.push(formula.get('alarmMode')); recFormula.push(formula.get('alarmColumn')); arrFormula.push(Ext.encode(recFormula)); } }); rec.push(Ext.encode(arrFormula)); arr.push(Ext.encode(rec)); } list.push(Ext.encode(arr));
java处理关键代码:
// 报警分组 JSONArray jsonAlarmGroups = JSONArray.fromObject(jsonAlarm.getString(1)); for(int i=0;i<jsonAlarmGroups.size();i++){ JSONArray jaAlarmGroup = JSONArray.fromObject(jsonAlarmGroups.get(i)); String alarmGroupId = jaAlarmGroup.getString(0); AlarmGroup alarmGroup = alarmGroupDomainService.getAlarmGroup(alarmGroupId); boolean isNew = false; if(alarmGroup==null){ alarmGroup = new AlarmGroup(); isNew = true; } alarmGroup.setName(jaAlarmGroup.getString(1)); alarmGroup.setFtype(queryType); alarmGroup.setListQuery(query); alarmGroup.setSubject(subject); if(isNew) alarmGroupDomainService.addAlarmGroup(alarmGroup); else alarmGroupDomainService.editAlarmGroup(alarmGroup); // 报警规则,规则在分组下,处理起来很简单 JSONArray jaAlarmFormulas = JSONArray.fromObject( jaAlarmGroup.getString(3)); for(int m = 0;m<jaAlarmFormulas.size();m++){ JSONArray jaAlarmFormula = JSONArray.fromObject( jaAlarmFormulas.getString(m)); String alarmFormlulaId = jaAlarmFormula.getString(0); AlarmFormulas formula = alarmDomainService.getAlarmFormulaByAlarmId(alarmFormlulaId); if(formula == null){ formula = new AlarmFormulas(); //formula.setId(alarmFormlulaId); } formula.setName(jaAlarmFormula.getString(1).replaceFirst("^null$", "")); formula.setContent(jaAlarmFormula.getString(2).replaceFirst("^null$", "")); formula.setAlarmGroup(alarmGroup); formula.setBackground(jaAlarmFormula.getString(3).replaceFirst("^null$", "")); formula.setForeground(jaAlarmFormula.getString(4).replaceFirst("^null$", "")); formula.setSerial(jaAlarmFormula.getInt(5)); formula.setIsvalid(jaAlarmFormula.getBoolean(6)); formula.setAlarmMode(AlarmModeType.valueOf(jaAlarmFormula.getString(7))); formula.setAlarmColumn(jaAlarmFormula.getString(8).replaceFirst("^null$", "")); alarmDomainService.saveOrUpdateAlarmFormula(formula); } }
说明:
1) 我这里