版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.5命令的使用深圳市信息职业技术学院——保存命令列表保存命令框架实现介绍01目
录列表保存命令开发示例02表单保存命令框架实现介绍03表单保存命令开发示例04保存命令注意事项05知识回顾平台删除命令实现介绍;自定义删除命令开发示例;自定义删除命令注意事项;学习目标通过本节学习可以:掌握列表保存命令的重写;掌握表单保存命令的重写;掌握保存命令有哪些注意事项;了解列表保存命令平台的实现逻辑;了解表单保存命令平台的实现逻辑。01列表保存命令框架实现介绍平台列表保存命令实现逻辑介绍平台列表保存命令实现逻辑介绍列表保存命令前端部分在SIE.cmd.Save中实现的,后端保存逻辑在SaveCommand中实现的。重写的列表保存命令,即使不处理后端逻辑,也必须添加后端CS命令文件,否则点击重写的保存命令会报错。列表保存命令的命名规范:ListSave+实体名+Command;重写保存命令的定义SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.ListSaveReaderCommand',{extend:'SIE.cmd.Save',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});后端CS命令,前端和后端的全命名空间要完全一致。public
class
ListSaveReaderCommand:SaveCommand{}列表保存命令前端可重写的方法列表保存命令前端可重写的方法canExecute:function(view){}:是否可执行方法,返回值为true或false;execute:function(view,source){}:执行方法,命令执行的入口,不建议重写;onValidation:function(view){}:验证方法,处理前端验证,框架统一实现,通常不需要重写;onSaving:function(view){}:保存数据前的处理,调用了验证的方法,通常不需要重写;doSave:function(view){}:执行保存操作的逻辑,会向后端请求数据;onSaved:function(view,res){}:视图数据提交保存后回调处理;onSavedMsg:function(view,res){}:保存后的提示信息平台保存命令前端方法实现逻辑介绍方法实现逻辑介绍canExecute:function(view){} 保存按钮是否可执行,返回值为true或者是false。canExecute:function(view){if(view.isListView){varresult=false;varpv=view.getParent();//判断childif(pv){varcurrent=pv.getCurrent();if(current){if(!current.isNew()){result=_canExecute(view);}}}else{result=view.getData().isDirty();if(view.getCurrent()){for(vari=0;i<view.getData().data.items.length;i++){varisresult=view.getData().data.items[i].isDirty();if(isresult){result=true;break;}}}}returnresult;}returnthis.callParent(arguments);},var_canExecute=function(view){varresult;if(view.editMode===SIE.viewMeta.editMode.FORM){varcurrent=view.getCurrent();if(current){result=current.isChildrenDirty();}}else{result=view.getData().isDirty();}returnresult;};_canExecute私有方法的逻辑:编辑模式为表单模式,返回值为子是否为脏;编辑模式为行内:返回值为当前视图的数据是否为脏。为子,父的当前操作行存在,且不是新增,是否允许执行为_canExecute的逻辑。不为子,获取的视图数据只要有一行数据为脏,则保存按钮允许操作。平台保存命令前端方法实现逻辑介绍execute:function(view,source){} 执行方法execute:function(view,source){varme=this;if(this.isExecuting==true)return;this.isExecuting=true;setTimeout(function(){me.isExecuting=false;},100,me);varisValid=this.onSaving(view);if(isValid)this.doSave(view);}onSaving:function(view){returnthis.onValidation(view);},onValidation:function(view){returnview.validateData();},处理框架的前端验证前端验证校验通过,调用doSave的方法,去处理执行的逻辑。方法实现逻辑介绍平台保存命令前端方法实现逻辑介绍doSave执行保存逻辑和onSaved保存后逻辑的方法。 doSave:function(view){varme=this;varchildren=view.getChildren();varwithChildren=children.length>0;view.execute({withChildren:withChildren,success:function(res){me.onSaved(view,res);}});}, onSaved:function(view,res){varme=this;varoperationView=view;if(view.associateCmd){operationView=view.associateCmd.view;}_viewReload(operationView);me.onSavedMsg(view,res);},通过view.execute向后端请求数据,执行保存数据的逻辑,在请求成功的方法中,调用onSaved方法处理保存后的逻辑。保存成功后重新加载列表的数据,并提示保存成功的消息。方法实现逻辑介绍平台保存命令前端方法实现逻辑介绍_viewReload加载列表的私有方法和onSaveMsg消息提示方法/***private私有方法,列表加载数据*@param{SIE.view.ListView}view-视图对象*/var_viewReload=function(view){if(view.isListView){view.reloadData();}}; /***@protectedvirtualvoid*保存后的提示信息*@param{type}view*@param{type}res*/onSavedMsg:function(view,res){SIE.Msg.showInstantMessage('保存成功'.t());},重新加载表格的数据。倒计时提示保存成功的的消息。方法实现逻辑介绍列表保存命令后端可重写的方法列表保存命令后端可重写的方法Excute:执行方法,不建议重写;OnSaving:保存前方法,框架预留的一个空方法,用于处理保存前的逻辑;DoSave:执行保存的逻辑,传入的参数是前端操作过变更的数据;OnSaved:保存后方法,框架预留的一个空方法,用于处理保存后的业务逻辑;平台保存命令后端方法实现逻辑介绍public
class
SaveCommand:ListViewCommand
{
//命令名
public
const
stringCommandName="SIE.cmd.Save"; //执行方法 protected
override
objectExcute(ViewArgsargs,stringscope)
{EntityListdeserializeData=GetDeserializeData(args,scope);OnSaving(deserializeData);DoSave(deserializeData);OnSaved(deserializeData);
returndeserializeData;
}
//保存前动作
protected
virtual
voidOnSaving(EntityListdata)
{
}
//进行保存 protected
virtual
voidDoSave(EntityListdata)
{RepositoryFactory.Save(data);data.MarkSaved();
} //保存后动作 protected
virtual
voidOnSaved(EntityListdata)
{
}
}方法实现逻辑介绍后端执行方法,获取反序列化之后的数据,调用保存前、保存中和保存后方法。执行保存操作,如果有验证和提交事件的处理,会同步进行处理。标记数据为未修改的状态。思考题在前端命令中定义私有方法是如何进行定义的?SIE.defineCommand('SIE.cmd.Save',function(){/***private私有方法,列表加载数据*@param{SIE.view.ListView}view-视图对象*/var_canExecute=function(view){ };return{meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},02列表保存命令开发示例思考题读者管理功能设置为行内操作,重写保存命令,保存逻辑为:读者管理数据保存成功后,关联的读者分类的可借书数量加1?从需求分析可以看出,该业务只有后端处理逻辑,所以前端方法不需要重写。列表保存命令重写示例1、添加命令的js文件,继承SIE.cmd.Save,js文件的生成操作设置为嵌入的资源;SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.ListSaveReaderCommand',{extend:'SIE.cmd.Save',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});开发步骤列表保存命令重写示例2、在控制器中实现读者分类可借书数量加1的逻辑;开发步骤列表保存命令重写示例3、添加保存命令的CS文件,继承SaveCommand,重写保存后方法OnSaved,在保存后方法中处理参数,调用步骤2处理读者分类可借书数量加1逻辑的方法;开发步骤列表保存命令重写示例4、在界面的ConfigListView方法中使用命令,运行项目操作保存按钮即可看到效果;开发步骤03表单保存命令框架实现介绍平台表单保存命令实现逻辑介绍平台表单保存命令实现逻辑介绍表单保存命令前端部分在SIE.cmd.FormSave中实现的,后端保存逻辑在FormSaveCommand中实现的。重写的表单保存命令,即使不处理后端逻辑,也必须添加后端CS命令文件,否则点击重写的保存命令会报错。表单保存命令的命名规范:FormSave+实体名+Command;重写表单保存命令的定义SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.FormSaveReaderCommand',{ extend:'SIE.cmd.FormSave',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});后端CS命令,前端和后端的全命名空间要完全一致。public
class
ListSaveReaderCommand:FormSaveCommand{}表单保存命令前端可重写的方法表单保存命令前端可重写的方法canExecute:function(view){}:是否可执行方法,返回值为true或false;execute:function(view,source){}:执行方法,命令执行的入口,不建议重写;onValidation:function(view){}:验证方法,处理前端验证,框架统一实现,通常不需要重写;onSaving:function(view){}:保存数据前的处理,调用了验证的方法,通常不需要重写;doSave:function(view){}:执行保存操作的逻辑,会向后端请求数据;onSaved:function(view,res){}:视图数据提交保存后回调处理;onSavedMsg:function(view,res){}:保存后的提示信息平台保存命令前端方法实现逻辑介绍方法实现逻辑介绍canExecute:function(view){} 保存按钮是否可执行,返回值为true或者是false。
canExecute:function(view){if(view.isDetailView){varresult=false;varcurrent=view.getCurrent();if(current){result=current.isDirty();}returnresult;}returnthis.callParent(arguments);},根据当前操作行的数据是否为脏控制是否可执行平台保存命令前端方法实现逻辑介绍execute:function(view,source){} 执行方法execute:function(view,source){varme=this;if(this.isExecuting==true)return;this.isExecuting=true;setTimeout(function(){me.isExecuting=false;},100,me);varisValidator=this.onSaving(view);if(isValidator)this.doSave(view);elseSIE.Msg.showMessage("数据验证未通过,保存失败!".t())},处理框架的前端验证前端验证校验通过,调用doSave的方法,去处理执行的逻辑。方法实现逻辑介绍验证未通过给出具体的提示。平台保存命令前端方法实现逻辑介绍onValidation:function(view){}验证方法,onSaving:function(view){}保存前方法 /***@protectedvirtualvoid*验证实体*@param{type}entity*/onValidation:function(view){returnview.validateData();},/***保存前方法*@paramview当前视图*@returns*/onSaving:function(view){varisValidator=this.onValidation(view);returnisValidator;},前端数据校验调用前端校验。方法实现逻辑介绍平台保存命令前端方法实现逻辑介绍doSave:function(view){}执行保存逻辑方法。 doSave:function(view){varme=this;varchildren=view.getChildren();varwithChildren=children.length>0;view.execute({withChildren:withChildren,success:function(res){me.onSaved(view,res);}});},通过view.execute向后端请求数据,执行保存数据的逻辑,在请求成功的方法中,调用onSaved方法处理保存后的逻辑。方法实现逻辑介绍平台保存命令前端方法实现逻辑介绍onSaved:function(view){}保存后逻辑和onSaveMsg:function(view){}消息提示方法。onSaved:function(view,res){varme=this;varcurrent=view.getCurrent();current.markSaved();CRT.Event.fire(view.model+'_refresh',view.getCurrent().getId());CRT.Event.fire(view.model+'_'+view.getCurrent().getId()+'_refresh',view.getCurrent().getId());me.onSavedMsg(view,res);}, /***@protectedvirtualvoid*保存后的提示信息*@param{type}view*@param{type}res*/onSavedMsg:function(view,res){SIE.Msg.showInstantMessage('保存成功'.t());},激活刷新事件。方法实现逻辑介绍表单保存命令后端可重写的方法表单保存命令后端可重写的方法Excute:执行方法,不建议重写;OnValidation:保存前验证方法;OnSaving:保存前方法,框架预留的一个空方法,用于处理保存前的逻辑;DoSave:执行保存的逻辑,传入的参数是前端操作过变更的数据;OnSaved:保存后方法,框架预留的一个空方法,用于处理保存后的业务逻辑;平台表单保存命令后端方法实现逻辑介绍//表单保存命令public
class
FormSaveCommand:DetailViewCommand
{
//命令名
public
const
stringFormSaveCommandName="SIE.cmd.FormSave";
//执行方法
protected
override
objectExcute(ViewArgsargs,stringscope)
{EntityListdeserializeData=GetDeserializeData(args,scope);Entityentity=(deserializeData.Count>0)?deserializeData[0]:null;OnSaving(entity);DoSave(entity);OnSaved(entity);
returnentity;
}
}方法实现逻辑介绍获取反序列化数据实体数据的处理,这里区分列表的保存,列表保存传入的参数是集合,这里是实体对象。FormSaveCommand表单命令类实现逻辑;调用父类DetailViewCommand的保存前、保存中和保存后方法。平台表单保存命令后端方法实现逻辑介绍
public
abstract
class
DetailViewCommand:ViewCommand
{
//保存前验证
protected
virtual
voidOnValidation(Entityentity)
{BrokenRulesCollectionbrokenRulesCollection=entity.Validate();
if(brokenRulesCollection.Count>0)
{
throw
newValidationException(brokenRulesCollection.ToString().L10N());
}
}
//保存前动作
protected
virtual
voidOnSaving(Entityentity)
{OnValidation(entity);
}
//进行保存
protected
virtual
voidDoSave(Entityentity)
{RepositoryFactory.Save(entity);entity.MarkSaved();
}
//保存后动作
protected
virtual
voidOnSaved(Entityentity)
{
}
}方法实现逻辑介绍保存前方法去调用了验证方法的逻辑。保存数据。FormSaveCommand继承的父类DetailViewCommand类实现逻辑;标记为未修改的状态。思考题在前端标记当前行数据为未修改状态,应该如何实现?view.getCurrent().markSaved();04表单保存命令开发示例思考题读者管理功能设置为表单操作,添加修改界面保存数据完成后,关闭新增、修改页签,应该如何进行开发实现?从需求分析可以看出,该业务只有前端处理逻辑,后端方法不需要重写。表单保存命令开发示例界面效果表单保存命令开发示例1、添加保存命令的js文件,继承SIE.cmd.FormSave,js文件设置嵌入到资源,重写onSavedMsg方法,在这个方法中处理关闭窗体的逻辑。关闭当前页签使用:CRT.Workbench.closeCurrentTab();SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.FormSaveReaderCommand',{extend:'SIE.cmd.FormSave',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},onSavedMsg:function(view,res){
varme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年软件许可使用合同的软件范围和许可期限
- 2024年物业清洁合同:保持环境共创绿色家园
- 品质生活从时尚选择开始
- 立秋营销新篇章
- 2024私房旧房交易纠纷调解服务合同3篇
- 媒体新篇章模板
- 揭秘全球旅游新趋势
- 大宗商品货款质押合同(2篇)
- 《煤矿职业病危害防治》培训课件2025
- 2024陶瓷杯团购采购合同附带市场调研与产品改进服务3篇
- 7.激素及其作用机制
- 土壤肥料全套课件
- 毕业生延期毕业申请表
- 学校6S管理制度
- 肽的健康作用及应用课件
- T.C--M-ONE效果器使用手册
- 8小时等效A声级计算工具
- 煤矿矿井供电设计(DOC26页)
- 人教版七年级下册数学计算题300道
- 社会实践登记表
- 走遍西班牙1~19笔记
评论
0/150
提交评论