版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
3.5命令的使用深圳市信息職業(yè)技術學院——選擇命令框架選擇命令實現(xiàn)介紹01目
錄自定義選擇命令的開發(fā)實現(xiàn)02自定義選擇命令注意事項03知識回顧平臺查詢實現(xiàn)介紹;標準查詢實現(xiàn)功能查詢的開發(fā)實現(xiàn);重寫查詢命令實現(xiàn)功能查詢的開發(fā)實現(xiàn);自定義查詢實體實現(xiàn)功能查詢的開發(fā)實現(xiàn);標準查詢+數(shù)據(jù)提供者實現(xiàn)功能查詢的開發(fā)實現(xiàn);學習目標通過本節(jié)學習可以:掌握自定義選擇命令的開發(fā)實現(xiàn);了解框架選擇命令的實現(xiàn)邏輯。01框架選擇命令實現(xiàn)介紹選擇命令框架實現(xiàn)介紹選擇命令框架實現(xiàn)介紹選擇命令框架是在SIE.cmd.LookupCommandBase中實現(xiàn)的。重寫選擇命令需要繼承SIE.cmd.LookupCommandBase,框架選擇命令通常用在子列表中。選擇命令的命名規(guī)范:Select+實體名+Command;重寫選擇命令的定義:SIE.defineCommand('SIE.Web.LibMan.ReaderMans.Commands.SelectManCatCommand',{extend:'SIE.cmd.LookupCommandBase',meta:{text:"選擇",group:"edit",iconCls:"icon-PlaylistCheckicon-blue"},});后端CS命令,前端和后端的全命名空間要完全一致。public
class
SelectManCatCommand:ViewCommand{}選擇命令可重寫的方法選擇命令可重寫的方法canExecute:function(view){}:是否可執(zhí)行方法,返回值為true或false;execute:function(view,source){}:執(zhí)行方法,命令執(zhí)行的入口,不建議重寫;save:function(win){}:保存方法,虛方法,繼承選擇命令,該方法必須實現(xiàn);_checkParameter:function(){}:檢查配置的必須參數(shù);config:選擇命令的配置,數(shù)據(jù)參數(shù)dataParams必須配置;_loadSourceViewAllData:function(view,source){}:加載原視圖的所有數(shù)據(jù);
getViewMeta:function(source){}:生成彈出界面Meta;getMetacallback:function(blocks,source){}:生成彈出界面Meta回調(diào)函數(shù);_queryBlockProcess:function(block){}:查詢塊處理;選擇命令可重寫的方法選擇命令可重寫的方法_gridBlockProcess:function(block){}:表格處理;_popupWin:function(ui,source){}:彈出框處理;_reloadTargetViewData:function(){}:加載彈窗視圖的數(shù)據(jù)。onLoad:function(store,records,successful,operation,eOpts){}:根據(jù)數(shù)據(jù)實現(xiàn)勾選上;getRowClass:function(record,index,rowParams,store){}:配置行樣式;onBeforeSelect:function(selModel,record,index,eOpts){}:選擇前事件;onSelect:function(selModel,record,index,eOpts){}:選擇事件;onBeforeDeselect:function(selModel,record,index,eOpts){}:取消選擇前事件;onDeselect:function(selModel,record,index,eOpts){}:取消選擇事件;選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹canExecute:是否可執(zhí)行方法,返回值為true或者是false。canExecute:function(view){varpv=view.getParent();if(!pv){returntrue;}varentity=pv.getCurrent();varresult=entity!==null;if(result){result=pv.getSelection().length==1;}if(result){result=!entity.isNew();}returnresult;},獲取父父當前操作行不為null,且只選擇一行,選擇的行狀態(tài)不是新增,則選擇按鈕允許操作,否則不允許操作。父不存在,返回true,選擇按鈕允許操作獲取父當前操作行父當前操作行為null,返回false,選擇按鈕不允許操作。選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹execute::執(zhí)行方法;save:保存方法。execute:function(view,source){varme=this;me._checkParameter();me._loadSourceViewAllData(view,source);},save:function(win){///<summary>///protectedabstract保存選擇的操作列表。(子類需要重寫實現(xiàn)自己的業(yè)務)///</summary>SIE.markAbstract();},調(diào)用檢查配置必須參數(shù)的方法調(diào)用加載原視圖的所有數(shù)據(jù)執(zhí)行方法使用框架默認實現(xiàn),通常不需要重寫虛方法,子類必須實現(xiàn)重寫的選擇命令,該方法必須實現(xiàn),用于處理自己的業(yè)務,主要是選擇后數(shù)據(jù)的保存操作。選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹config:選擇命令全局配置。config:{userConfig:{dataParams:{specKeyPrototyName:null,//指定的關鍵屬性的,根據(jù)此值獲取,子類必須配置
targetClassName:null,//目標類全名,用于生成目標類的界面,子類必須配置
targetCriteriaClassName:null,},gridCfg:{multiSelect:true,//控件默認多選
pageSize:10000,//默認取10000筆數(shù)據(jù),如需要更多,重寫此配置即可
},}},用戶配置,包括數(shù)據(jù)參數(shù)和列表參數(shù)配置必須配置,子和彈出框?qū)嶓w的外鍵必須配置,彈出框列表實體的全命名空間彈出框查詢實體的配置,不配置,默認為彈出框?qū)嶓w全命名空間+Criteria選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹選擇命令的構(gòu)造函數(shù)和全局變量定義constructor:function(config){///<summary>///構(gòu)造函數(shù)
///</summary>///<paramname="config">可配置的屬性對象</param>this.callParent(arguments);this.initConfig(config);this.userConfig=this.getUserConfig();this.dataParams=this.userConfig.dataParams;this.gridCfg=this.userConfig.gridCfg;},_sourceId:null,//操作的源ID關聯(lián)關系的(如用戶ID關聯(lián)(一對一,一對多)用戶組,這里表示的為用戶ID)
_sourceViewSelectItems:[],//源視圖已選項值
_targetView:null,//操作彈窗視圖
_targetSelectItems:[],//操作彈窗視圖選擇的項
cloneStore:null,//克隆數(shù)據(jù)storelastClickTime:0,//最后單擊時間
executeIntervalSecond:1,//間隔,對外友好使用單位(秒)getExecuteInterval:function(){return(this.executeIntervalSecond||1)*1000;},//間隔,默認1秒,單位(毫秒),點擊命令就會執(zhí)行進來,這里使用框架的邏輯即可全局變量定義,方便后面方法的邏輯處理。選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹_checkParameter:
檢查參數(shù)。_checkParameter:function(){///<summary>///檢查配置的必須參數(shù)
///</summary>vardataParams=this.dataParams;if(Ext.isEmpty(dataParams.specKeyPrototyName)){SIE.emptyArgument('specKeyPrototyName');}if(Ext.isEmpty(dataParams.targetClassName)){SIE.emptyArgument('targetClassName');}Ext.require(dataParams.targetClassName);Ext.require(dataParams.targetCriteriaClassName||dataParams.targetClassName+'Criteria');},檢查關鍵屬性是否為空,為空,則提示。檢查彈出框的實體是否為空,為空,則提示。查詢實體取值,目標查詢實體配置了值則取目標查詢實體的值,否則根據(jù)目標實體+Criteria去匹配查詢實體不需要重寫,使用框架的邏輯即可滿足需求選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹_loadSourceViewAllData:加載源視圖的所有數(shù)據(jù)(不分頁)。_loadSourceViewAllData:function(view,source){varme=this;if(view){varcfg={scope:this,callback:function(records,operation,success){this.cloneStore._loaded=success;varparent=view.getParent();varsourceId;if(parent){sourceId=parent.getCurrent().getId();}else{if(view.getCurrent()){//沒有父實體時,當前實體可能為空
sourceId=view.getCurrent().getId();}}me._sourceId=sourceId;varmodel=view.model;if(model){me.getViewMeta(source);}}}varstore=view.getData();this.cloneStore=store.clone({pageSize:this.gridCfg.pageSize});//克隆數(shù)據(jù)storethis.cloneStore.load(cfg);}},不需要重寫,使用框架的邏輯即可滿足需求全局變量源id的值設置當前view的實體存在,則處理界面元數(shù)據(jù)加載數(shù)據(jù)選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹getViewMeta:生成彈出界面Meta;getMetacallback:生成彈出界面Meta回調(diào)函數(shù)。getViewMeta:function(source){varme=this;SIE.AutoUI.getMeta({model:me.dataParams.targetClassName,ignoreChild:true,ignoreCommands:true,isReadonly:true,ignoreQuery:false,isAggt:true,callback:function(res){me.getMetacallback(res,source);}});},
getMetacallback:function(blocks,source){varme=this;me._queryBlockProcess(blocks);me._gridBlockProcess(blocks);varui=SIE.AutoUI.generateAggtControl(blocks);me._popupWin(ui,source);me._reloadTargetViewData();},不需要重寫,使用框架的邏輯即可滿足需求不需要重寫,使用框架的邏輯即可滿足需求查詢塊視圖控件處理表格的處理彈出對話框視圖處理加載彈出框視圖數(shù)據(jù)選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹_queryBlockProcess:彈出框左邊查詢塊處理_queryBlockProcess:function(block){///<summary>///查詢塊處理-只讀為false///</summary>///<paramname="block"type="type"></param>if(block.surrounders){varsurround=block.surrounders["0"];if(surround){varitems=surround.mainBlock.formConfig.items;for(vari=0,len=items.length;i<len;i++){varitem=items[i];item.readOnly=false;}}}},根據(jù)實際業(yè)務需求,有可能需要重寫將查詢塊的所有控件都設置為可寫選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹_reloadTargetViewData:加載彈窗視圖的數(shù)據(jù)。_reloadTargetViewData:function(){ varme=this;me._sourceViewSelectItems=this.cloneStore.collect(me.dataParams.specKeyPrototyName);vardialogView=me._targetView;if(me._targetView!==null){varstore=dialogView.getData();if(store!==null){me.mon(store,'load',me.onLoad,this);if(dialogView._relations[0]){//存在查詢面板時
dialogView._relations[0]._target.tryExecuteQuery();}else{dialogView.loadData();}}}},根據(jù)實際業(yè)務需求,框架默認查詢不符合要求時需要重寫調(diào)用框架的查詢方法,查詢數(shù)據(jù)加載數(shù)據(jù)注冊加載事件選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹onLoad:根據(jù)數(shù)據(jù)實現(xiàn)勾選。onLoad:function(store,records,successful,operation,eOpts){ varme=this;if((me._sourceViewSelectItems&&me._sourceViewSelectItems.length>0)||(me._targetSelectItems&&me._targetSelectItems.items.length>0)){varselModel=me._targetView.getSelectionModel();if(records&&records.length>0){for(vari=0,len=records.length;i<len;i++){varrecord=records[i];if(me._sourceViewSelectItems.indexOf(record.getId())>-1){selModel.select(record,true,true);//勾選上.}if(me._targetSelectItems.keys.indexOf(record.getId())>-1){selModel.select(record,true,true);}}}}},加載事件對應方法,不需要重寫循環(huán)處理數(shù)據(jù),源數(shù)據(jù)和目標數(shù)據(jù)一致,則設置勾選,否則不勾選選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹popupWin:選擇命令彈出窗口設置。_popupWin:function(ui,source){ varme=this;me._targetView=ui._view;if(me.win&&me.win.animateTarget==source){return;}//彈窗
me.win=SIE.Window.show({title:('選擇'+me._targetView.label).t(),animateTarget:source,items:ui.getControl(),width:800,height:420,listeners:{close:function(){me.lastClickTime=0;}},//buttons:['確定','關閉'],//自定義按鈕名稱
callback:function(btn){ }});SIE.Window.winAutoSize(me.win);me.setGridListeners();me._targetSelectItems={items:[],keys:[]};},彈出窗體標題設置彈出窗體控件加載彈出窗體大小設置監(jiān)聽關閉時間,設置全局變量最后一次點擊的時間為0彈窗回調(diào)函數(shù),這里主要處理了彈窗確認按鈕的邏輯自適應窗體大小設置表格監(jiān)聽事件目標選擇數(shù)據(jù)置空選擇命令方法框架實現(xiàn)邏輯介紹方法實現(xiàn)邏輯介紹popupWin彈框回調(diào)函數(shù)實現(xiàn)。 //buttons:['確定','關閉'],//自定義按鈕名稱
callback:function(btn){if(btn==='確定'.t()){varelapsed=Ext.now()-me.lastClickTime;varinterval=me.getExecuteInterval();if(elapsed>=interval){me.lastClickTime=Ext.now();if(me._targetSelectItems.keys.length>0){me.save(me.win);returnfalse;//阻止窗口關閉,在save中根據(jù)返回結(jié)果處理
}else{SIE.Msg.showWarning('沒有可提交的數(shù)據(jù)');//沒有選擇數(shù)據(jù)點擊確定時,窗口直接關閉了
returnfalse;}}returnfalse;}}點擊確認按鈕,且存在選擇的行,調(diào)用保存方法選擇命令框架實現(xiàn)介紹選擇命令框架實現(xiàn)介紹選擇命令框架其他方法的實現(xiàn),參考SIE.cmd.LookupCommandBase.txt的實現(xiàn)。思考題重寫選擇命令,哪個方法必須實現(xiàn)?Save保存方法,該方法是虛方法,繼承父類必須實現(xiàn)。02自定義選擇命令的開發(fā)實現(xiàn)思考題通過前面框架選擇命令的實現(xiàn)介紹,重寫選擇命令,該如何實現(xiàn)?選擇命令重寫示例業(yè)務描述:讀者管理功能中添加管理讀者分類子實體,子實體的數(shù)據(jù)通過選擇分類命令操作讀者分類已維護的數(shù)據(jù)進行保存操作,效果如下圖所示:開發(fā)步驟選擇命令重寫示例創(chuàng)建管理讀者分類的子實體,添加兩個引用屬性:讀者管理與管理讀者分類的引用關系,引用類型指向父;管理讀者分類與讀者分類的關系(該關系增加一個視圖屬性,用于界面展示)開發(fā)步驟選擇命令重寫示例管理讀者分類與讀者管理的關系:子實體和父引用關系開發(fā)步驟選擇命令重寫示例管理讀者分類與讀者分類的關系開發(fā)步驟選擇命令重寫示例類別名稱的視圖屬性開發(fā)步驟選擇命令重寫示例在讀者管理的實體中添加管理讀者分類的列表屬性開發(fā)步驟選擇命令重寫示例配置管理讀者分類的界面開發(fā)步驟選擇命令重寫示例添加選擇命令的js文件,繼承SIE.cmd.LookupCommandBase,處理用戶配置和實現(xiàn)保存方法。開發(fā)步驟選擇命令重寫示例重寫選擇命令前端實現(xiàn)源代碼開發(fā)步驟SIE.defineCommand('SIE.Web.XyTest.ReaderMans.Commands.SelectManCatCommand',{extend:'SIE.cmd.LookupCommandBase',meta:{text:"選擇分類",group:"edit",iconCls:"icon-PlaylistCheckicon-blue"},userConfig:{dataParams:{specKeyPrototyName:'CatId',targetClassName:'SIE.XyTest.ReaderCats.ReaderCat'},},save:function(win){
varme=this;
varindata={};
varselections=this._targetSelectItems.items;
if(selections&&selections.length>0){
varmanCatInReaderCats=[];SIE.each(selections,function(item){
varcatId=item.getId();
if(me._sourceViewSelectItems.indexOf(catId)===-1){
varmanCatInReaderCat={ManId:me._sourceId,CatId:catId};manCatInReaderCats.push(manCatInReaderCat);
}
});indata=manCatInReaderCats;me._targetView.execute({data:indata,success:function(res){win.close();//關閉模態(tài)窗口me._ownerView.loadChildData(true);//重載視圖數(shù)據(jù)
}},me._ownerView);
}
else{SIE.Msg.showWarning('沒有可提交的數(shù)據(jù)');
}
},});選擇命令重寫示例選擇命令后端實現(xiàn)源代碼開發(fā)步驟namespaceSIE.Web.XyTest.ReaderMans.Commands{
internal
class
SelectManCatCommand:ViewCommand
{
protected
override
objectExcute(ViewArgsargs,stringscope)
{
varmeta=ClientEntities.Find(args.Type);
varsavedData=newEntityList<ManReaderCat>();//RF.Find(meta.EntityType).NewList();
varmanReaderCatList=args.Data.ToJsonObject<List<ManReaderCat>>();
if(null==manReaderCatList||manReaderCatList.Count==0)
{
throw
newArgumentNullException("{0}數(shù)據(jù)參數(shù)不能為空".FormatArgs(nameof(manReaderCatList)));
}
foreach(variteminmanReaderCatList)
{
varmanReaderCat=newManReaderCat();manReaderCat.ManId=item.ManId;manReaderCat.CatId=item.CatId;savedData.Add(manReaderCat);
}RT.Service.Resolve<ReaderManController>().SaveManReaderCat(savedData);
return
true;
}
}}選擇命令重寫示例在界面使用命令開發(fā)步驟選擇命令重寫示例效果開發(fā)步驟知識擴展如果需要處理選擇命令彈出左邊查詢條件,要求如下所示,要怎么實現(xiàn)?知識擴展知識擴展設置默認值,在選擇命令的js文件中重寫_reloadTargetViewData方法實現(xiàn)。知識擴展_reloadTargetViewData:function(){
///<summary>
///加載彈窗視圖的數(shù)據(jù)
///</summary>
varme=this;me._sourceViewSelectItems=this.cloneStore.collect(me.dataParams.specKeyPrototyName);
vardialogView=me._targetView;
if(me._targetView!==null){
varstore=dialogView.getData();
if(store!==null){me.mon(store,'load',me.onLoad,this);
if(dialogView._relations[0]){//存在查詢面板時dialogView._relations[0]._target.getCurrent().setCatNo("01")dialogView._relations[0]._target.tryExecuteQuery();
}
else{dialogView.loadData();
}
}
}
},調(diào)用框架查詢方法前進行默認值設置知識擴展設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人與銀行2024年度借款合同3篇
- 專業(yè)吊車作業(yè)協(xié)議模板2024版
- 2024版產(chǎn)品標準化認證協(xié)議文件版B版
- 2024中美農(nóng)產(chǎn)品加工與出口合作協(xié)議范文3篇
- 2024機器租賃協(xié)議書
- 搶占春節(jié)外賣市場
- 2024年度地產(chǎn)公司房地產(chǎn)廣告效果評估與優(yōu)化委托代理協(xié)議3篇
- 2024年股權質(zhì)押擔保協(xié)議標準格式版B版
- 解讀現(xiàn)代小說奧秘
- 2024年貨款分期償還買賣約定
- 護欄和扶手制作與安裝工程檢驗批質(zhì)量驗收記錄
- 醫(yī)院文化建設與員工凝聚力提升
- 食堂安全操作規(guī)范培訓課件(48張)
- 水庫引調(diào)水工程項目可行性研究報告
- 中藥飲片行業(yè)招商策劃
- ISO26262考試試題及答案
- 乳頭混淆介紹演示培訓課件
- 胸腔積液引流的護理查房
- (完整文本版)河南2016定額計算規(guī)則
- 小升初個人簡歷模板下載
- 外科學-粘連性腸梗阻
評論
0/150
提交評論