版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3.5命令的使用深圳市信息職業(yè)技術(shù)學(xué)院——保存命令列表保存命令框架實(shí)現(xiàn)介紹01目
錄列表保存命令開發(fā)示例02表單保存命令框架實(shí)現(xiàn)介紹03表單保存命令開發(fā)示例04保存命令注意事項(xiàng)05知識回顧平臺刪除命令實(shí)現(xiàn)介紹;自定義刪除命令開發(fā)示例;自定義刪除命令注意事項(xiàng);學(xué)習(xí)目標(biāo)通過本節(jié)學(xué)習(xí)可以:掌握列表保存命令的重寫;掌握表單保存命令的重寫;掌握保存命令有哪些注意事項(xiàng);了解列表保存命令平臺的實(shí)現(xiàn)邏輯;了解表單保存命令平臺的實(shí)現(xiàn)邏輯。01列表保存命令框架實(shí)現(xiàn)介紹平臺列表保存命令實(shí)現(xiàn)邏輯介紹平臺列表保存命令實(shí)現(xiàn)邏輯介紹列表保存命令前端部分在SIE.cmd.Save中實(shí)現(xiàn)的,后端保存邏輯在SaveCommand中實(shí)現(xiàn)的。重寫的列表保存命令,即使不處理后端邏輯,也必須添加后端CS命令文件,否則點(diǎn)擊重寫的保存命令會報(bào)錯。列表保存命令的命名規(guī)范:ListSave+實(shí)體名+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){}:是否可執(zhí)行方法,返回值為true或false;execute:function(view,source){}:執(zhí)行方法,命令執(zhí)行的入口,不建議重寫;onValidation:function(view){}:驗(yàn)證方法,處理前端驗(yàn)證,框架統(tǒng)一實(shí)現(xiàn),通常不需要重寫;onSaving:function(view){}:保存數(shù)據(jù)前的處理,調(diào)用了驗(yàn)證的方法,通常不需要重寫;doSave:function(view){}:執(zhí)行保存操作的邏輯,會向后端請求數(shù)據(jù);onSaved:function(view,res){}:視圖數(shù)據(jù)提交保存后回調(diào)處理;onSavedMsg:function(view,res){}:保存后的提示信息平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹方法實(shí)現(xiàn)邏輯介紹canExecute:function(view){} 保存按鈕是否可執(zhí)行,返回值為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私有方法的邏輯:編輯模式為表單模式,返回值為子是否為臟;編輯模式為行內(nèi):返回值為當(dāng)前視圖的數(shù)據(jù)是否為臟。為子,父的當(dāng)前操作行存在,且不是新增,是否允許執(zhí)行為_canExecute的邏輯。不為子,獲取的視圖數(shù)據(jù)只要有一行數(shù)據(jù)為臟,則保存按鈕允許操作。平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹execute:function(view,source){} 執(zhí)行方法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();},處理框架的前端驗(yàn)證前端驗(yàn)證校驗(yàn)通過,調(diào)用doSave的方法,去處理執(zhí)行的邏輯。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹doSave執(zhí)行保存邏輯和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向后端請求數(shù)據(jù),執(zhí)行保存數(shù)據(jù)的邏輯,在請求成功的方法中,調(diào)用onSaved方法處理保存后的邏輯。保存成功后重新加載列表的數(shù)據(jù),并提示保存成功的消息。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹_viewReload加載列表的私有方法和onSaveMsg消息提示方法/***private私有方法,列表加載數(shù)據(jù)*@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());},重新加載表格的數(shù)據(jù)。倒計(jì)時提示保存成功的的消息。方法實(shí)現(xiàn)邏輯介紹列表保存命令后端可重寫的方法列表保存命令后端可重寫的方法Excute:執(zhí)行方法,不建議重寫;OnSaving:保存前方法,框架預(yù)留的一個空方法,用于處理保存前的邏輯;DoSave:執(zhí)行保存的邏輯,傳入的參數(shù)是前端操作過變更的數(shù)據(jù);OnSaved:保存后方法,框架預(yù)留的一個空方法,用于處理保存后的業(yè)務(wù)邏輯;平臺保存命令后端方法實(shí)現(xiàn)邏輯介紹public
class
SaveCommand:ListViewCommand
{
//命令名
public
const
stringCommandName="SIE.cmd.Save"; //執(zhí)行方法 protected
override
objectExcute(ViewArgsargs,stringscope)
{EntityListdeserializeData=GetDeserializeData(args,scope);OnSaving(deserializeData);DoSave(deserializeData);OnSaved(deserializeData);
returndeserializeData;
}
//保存前動作
protected
virtual
voidOnSaving(EntityListdata)
{
}
//進(jìn)行保存 protected
virtual
voidDoSave(EntityListdata)
{RepositoryFactory.Save(data);data.MarkSaved();
} //保存后動作 protected
virtual
voidOnSaved(EntityListdata)
{
}
}方法實(shí)現(xiàn)邏輯介紹后端執(zhí)行方法,獲取反序列化之后的數(shù)據(jù),調(diào)用保存前、保存中和保存后方法。執(zhí)行保存操作,如果有驗(yàn)證和提交事件的處理,會同步進(jìn)行處理。標(biāo)記數(shù)據(jù)為未修改的狀態(tài)。思考題在前端命令中定義私有方法是如何進(jìn)行定義的?SIE.defineCommand('SIE.cmd.Save',function(){/***private私有方法,列表加載數(shù)據(jù)*@param{SIE.view.ListView}view-視圖對象*/var_canExecute=function(view){ };return{meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},02列表保存命令開發(fā)示例思考題讀者管理功能設(shè)置為行內(nèi)操作,重寫保存命令,保存邏輯為:讀者管理數(shù)據(jù)保存成功后,關(guān)聯(lián)的讀者分類的可借書數(shù)量加1?從需求分析可以看出,該業(yè)務(wù)只有后端處理邏輯,所以前端方法不需要重寫。列表保存命令重寫示例1、添加命令的js文件,繼承SIE.cmd.Save,js文件的生成操作設(shè)置為嵌入的資源;SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.ListSaveReaderCommand',{extend:'SIE.cmd.Save',meta:{text:"保存",group:"edit",iconCls:"icon-SaveEntityicon-blue"},});開發(fā)步驟列表保存命令重寫示例2、在控制器中實(shí)現(xiàn)讀者分類可借書數(shù)量加1的邏輯;開發(fā)步驟列表保存命令重寫示例3、添加保存命令的CS文件,繼承SaveCommand,重寫保存后方法OnSaved,在保存后方法中處理參數(shù),調(diào)用步驟2處理讀者分類可借書數(shù)量加1邏輯的方法;開發(fā)步驟列表保存命令重寫示例4、在界面的ConfigListView方法中使用命令,運(yùn)行項(xiàng)目操作保存按鈕即可看到效果;開發(fā)步驟03表單保存命令框架實(shí)現(xiàn)介紹平臺表單保存命令實(shí)現(xiàn)邏輯介紹平臺表單保存命令實(shí)現(xiàn)邏輯介紹表單保存命令前端部分在SIE.cmd.FormSave中實(shí)現(xiàn)的,后端保存邏輯在FormSaveCommand中實(shí)現(xiàn)的。重寫的表單保存命令,即使不處理后端邏輯,也必須添加后端CS命令文件,否則點(diǎn)擊重寫的保存命令會報(bào)錯。表單保存命令的命名規(guī)范:FormSave+實(shí)體名+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){}:是否可執(zhí)行方法,返回值為true或false;execute:function(view,source){}:執(zhí)行方法,命令執(zhí)行的入口,不建議重寫;onValidation:function(view){}:驗(yàn)證方法,處理前端驗(yàn)證,框架統(tǒng)一實(shí)現(xiàn),通常不需要重寫;onSaving:function(view){}:保存數(shù)據(jù)前的處理,調(diào)用了驗(yàn)證的方法,通常不需要重寫;doSave:function(view){}:執(zhí)行保存操作的邏輯,會向后端請求數(shù)據(jù);onSaved:function(view,res){}:視圖數(shù)據(jù)提交保存后回調(diào)處理;onSavedMsg:function(view,res){}:保存后的提示信息平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹方法實(shí)現(xiàn)邏輯介紹canExecute:function(view){} 保存按鈕是否可執(zhí)行,返回值為true或者是false。
canExecute:function(view){if(view.isDetailView){varresult=false;varcurrent=view.getCurrent();if(current){result=current.isDirty();}returnresult;}returnthis.callParent(arguments);},根據(jù)當(dāng)前操作行的數(shù)據(jù)是否為臟控制是否可執(zhí)行平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹execute:function(view,source){} 執(zhí)行方法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("數(shù)據(jù)驗(yàn)證未通過,保存失??!".t())},處理框架的前端驗(yàn)證前端驗(yàn)證校驗(yàn)通過,調(diào)用doSave的方法,去處理執(zhí)行的邏輯。方法實(shí)現(xiàn)邏輯介紹驗(yàn)證未通過給出具體的提示。平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹onValidation:function(view){}驗(yàn)證方法,onSaving:function(view){}保存前方法 /***@protectedvirtualvoid*驗(yàn)證實(shí)體*@param{type}entity*/onValidation:function(view){returnview.validateData();},/***保存前方法*@paramview當(dāng)前視圖*@returns*/onSaving:function(view){varisValidator=this.onValidation(view);returnisValidator;},前端數(shù)據(jù)校驗(yàn)調(diào)用前端校驗(yàn)。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹doSave:function(view){}執(zhí)行保存邏輯方法。 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向后端請求數(shù)據(jù),執(zhí)行保存數(shù)據(jù)的邏輯,在請求成功的方法中,調(diào)用onSaved方法處理保存后的邏輯。方法實(shí)現(xiàn)邏輯介紹平臺保存命令前端方法實(shí)現(xiàn)邏輯介紹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());},激活刷新事件。方法實(shí)現(xiàn)邏輯介紹表單保存命令后端可重寫的方法表單保存命令后端可重寫的方法Excute:執(zhí)行方法,不建議重寫;OnValidation:保存前驗(yàn)證方法;OnSaving:保存前方法,框架預(yù)留的一個空方法,用于處理保存前的邏輯;DoSave:執(zhí)行保存的邏輯,傳入的參數(shù)是前端操作過變更的數(shù)據(jù);OnSaved:保存后方法,框架預(yù)留的一個空方法,用于處理保存后的業(yè)務(wù)邏輯;平臺表單保存命令后端方法實(shí)現(xiàn)邏輯介紹//表單保存命令public
class
FormSaveCommand:DetailViewCommand
{
//命令名
public
const
stringFormSaveCommandName="SIE.cmd.FormSave";
//執(zhí)行方法
protected
override
objectExcute(ViewArgsargs,stringscope)
{EntityListdeserializeData=GetDeserializeData(args,scope);Entityentity=(deserializeData.Count>0)?deserializeData[0]:null;OnSaving(entity);DoSave(entity);OnSaved(entity);
returnentity;
}
}方法實(shí)現(xiàn)邏輯介紹獲取反序列化數(shù)據(jù)實(shí)體數(shù)據(jù)的處理,這里區(qū)分列表的保存,列表保存?zhèn)魅氲膮?shù)是集合,這里是實(shí)體對象。FormSaveCommand表單命令類實(shí)現(xiàn)邏輯;調(diào)用父類DetailViewCommand的保存前、保存中和保存后方法。平臺表單保存命令后端方法實(shí)現(xiàn)邏輯介紹
public
abstract
class
DetailViewCommand:ViewCommand
{
//保存前驗(yàn)證
protected
virtual
voidOnValidation(Entityentity)
{BrokenRulesCollectionbrokenRulesCollection=entity.Validate();
if(brokenRulesCollection.Count>0)
{
throw
newValidationException(brokenRulesCollection.ToString().L10N());
}
}
//保存前動作
protected
virtual
voidOnSaving(Entityentity)
{OnValidation(entity);
}
//進(jìn)行保存
protected
virtual
voidDoSave(Entityentity)
{RepositoryFactory.Save(entity);entity.MarkSaved();
}
//保存后動作
protected
virtual
voidOnSaved(Entityentity)
{
}
}方法實(shí)現(xiàn)邏輯介紹保存前方法去調(diào)用了驗(yàn)證方法的邏輯。保存數(shù)據(jù)。FormSaveCommand繼承的父類DetailViewCommand類實(shí)現(xiàn)邏輯;標(biāo)記為未修改的狀態(tài)。思考題在前端標(biāo)記當(dāng)前行數(shù)據(jù)為未修改狀態(tài),應(yīng)該如何實(shí)現(xiàn)?view.getCurrent().markSaved();04表單保存命令開發(fā)示例思考題讀者管理功能設(shè)置為表單操作,添加修改界面保存數(shù)據(jù)完成后,關(guān)閉新增、修改頁簽,應(yīng)該如何進(jìn)行開發(fā)實(shí)現(xiàn)?從需求分析可以看出,該業(yè)務(wù)只有前端處理邏輯,后端方法不需要重寫。表單保存命令開發(fā)示例界面效果表單保存命令開發(fā)示例1、添加保存命令的js文件,繼承SIE.cmd.FormSave,js文件設(shè)置嵌入到資源,重寫onSavedMsg方法,在這個方法中處理關(guān)閉窗體的邏輯。關(guān)閉當(dāng)前頁簽使用: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年軟件許可使用合同的軟件范圍和許可期限
- 2024年物業(yè)清潔合同:保持環(huán)境共創(chuàng)綠色家園
- 品質(zhì)生活從時尚選擇開始
- 立秋營銷新篇章
- 2024私房舊房交易糾紛調(diào)解服務(wù)合同3篇
- 媒體新篇章模板
- 揭秘全球旅游新趨勢
- 大宗商品貨款質(zhì)押合同(2篇)
- 《煤礦職業(yè)病危害防治》培訓(xùn)課件2025
- 2024陶瓷杯團(tuán)購采購合同附帶市場調(diào)研與產(chǎn)品改進(jìn)服務(wù)3篇
- 7.激素及其作用機(jī)制
- 土壤肥料全套課件
- 畢業(yè)生延期畢業(yè)申請表
- 學(xué)校6S管理制度
- 肽的健康作用及應(yīng)用課件
- T.C--M-ONE效果器使用手冊
- 8小時等效A聲級計(jì)算工具
- 煤礦礦井供電設(shè)計(jì)(DOC26頁)
- 人教版七年級下冊數(shù)學(xué)計(jì)算題300道
- 社會實(shí)踐登記表
- 走遍西班牙1~19筆記
評論
0/150
提交評論