




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江大學《礦山地質》2023-2024學年第二學期期末試卷
- 廣東職業技術學院《大數據技術》2023-2024學年第二學期期末試卷
- 湖北體育職業學院《港澳臺廣告》2023-2024學年第二學期期末試卷
- 湖南財經工業職業技術學院《物理化學研究進展與前瞻》2023-2024學年第二學期期末試卷
- 蘇州健雄職業技術學院《動物生物化學》2023-2024學年第二學期期末試卷
- 煙臺汽車工程職業學院《資源材料與可持續發展》2023-2024學年第二學期期末試卷
- 漢口學院《對流層傳播》2023-2024學年第二學期期末試卷
- 呂梁師范高等專科學校《軟件工程》2023-2024學年第二學期期末試卷
- 武漢理工大學《互聯網運維技術》2023-2024學年第二學期期末試卷
- 心理健康課件模板
- DZ∕T 0054-2014 定向鉆探技術規程(正式版)
- 2022年中國建筑集團有限公司招聘筆試題庫及答案解析
- 溫泉度假設施造價預算
- 青少年創意編程試題
- 電子商務客戶服務5套綜合測試題帶答案
- 微觀經濟學課件第二章(高鴻業)
- RULES OF ORIGIN 原產地規則
- 國內旅游出團通知書(新版)
- LETTEROFINTENTION意向書范本
- 國內各航空公司差異化服務
- 《山東省自然科學基金資助項目年度進展報告》
評論
0/150
提交評論