- 浏览: 307727 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lzz3717845:
有道理,受教了~谢谢
关于SQL中自动增长列值回复(还原)的问题 -
桃汁天天:
ExtJs中如何动态设置其选中状态!! -
sangumaolv2:
你TM在说什么啊。。。。
关于SQL中自动增长列值回复(还原)的问题 -
duyupeng:
你好,我最近也是在使用这个控件,只是用了_id、_parent ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法) -
wokao_wg:
大伙可以看看作者说的http://www.sencha.com ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)2
作用:
在程序中,经常会遇到这种情况:即获取其它地方的参数,在本ComboBox中带上参数查询出结果,把结果中的某些字段值设置到所需要的地方(其它地方):
[同时在Grid中也支持],相关参数若不设置即就是普通的ComboBox!
Ext.ns("dnet.base"); dnet.base.AbstractCombo = Ext.extend(Ext.form.ComboBox, { _dataProviderFields_ :null //要顯示的字段即record($Model) ,_dataProviderName_ : null //組件名字 ,fieldMapping : null //設置到哪個Field中 ,paramMapping: null // ex: paramMapping: [{lovField:"...lovFieldName", dsField: "...dsFieldName"} ] ,callFromGrid:null //若此Combo則Grid中則需要設置(required if this combox in grid) ,storeUrl:null ,minChars:0 ,listEmptyText:"Can't find fit data !" /** 創建Store**/ ,_createStore_: function() { this.store = new Ext.data.Store({ remoteSort:true ,reader: new Ext.data.JsonReader( {totalProperty: 'totalCount',idProperty: 'id',root: 'data',messageProperty: 'message'} ,Ext.data.Record.create(this._dataProviderFields_) ) ,listeners: { "exception":{ fn: this.proxyException, scope:this }} ,url:this.storeUrl }) this.store.proxy.getConnection().async = false;//同步 } /** 更改了源碼中的doQuery方法,重寫 !**/ /*源碼中何處調用doQuery()方法 initQuery : function(){ this.doQuery(this.getRawValue()); }, */ ,doQuery : function(q, forceAll){ q = Ext.isEmpty(q) ? '' : q; var qe = { query: q, forceAll: forceAll, combo: this, cancel:false }; if(this.fireEvent('beforequery', qe)===false || qe.cancel){ return false; } q = qe.query; forceAll = qe.forceAll; if(forceAll === true || (q.length >= this.minChars)){ if( (this.lastQuery !== q) || (this.paramMapping != null && this.paramMapping.length>0) ){ this.lastQuery = q; if(this.mode == 'local'){ this.selectedIndex = -1; if(forceAll){ this.store.clearFilter(); }else{ this.store.filter(this.displayField, q); } this.onLoad(); }else{ //this.store.baseParams[this.queryParam] = q;//這是源碼中的code var bp = {} bp[this.queryParam]=q; if (this.paramMapping != null) { this._mapFilterFields_(bp); } /**若想將所有參數作為一個對象傳遞過去的話, * 可下一句改為this.store.baseParams["data"]=Ext.encode(bp) * 其中data是你傳遞過去的對象名. */ this.iteratorSetbaseParam(bp); this.store.load({ params: this.getParams(q) }); this.expand(); } }else{ this.selectedIndex = -1; this.onLoad(); } } } ,iteratorSetbaseParam:function(bp){ this.store.baseParams[this.queryParam]=bp[this.queryParam]; if(this.paramMapping !=null){ for(var i=0;i<this.paramMapping.length;i++){ this.store.baseParams[this.paramMapping[i].param]=bp[this.paramMapping[i].param]; } } } /** 如果設置了分頁pagesize大小,則store加載時會有分頁參數! **/ ,getParams : function(q){ // var p = {}; // //p[this.queryParam] = q; // if(this.pageSize){ // p.start = 0; // p.limit = this.pageSize; // } // return p; var params = {}, paramNames = this.store.paramNames; if(this.pageSize){ params[paramNames.start] = 0; params[paramNames.limit] = this.pageSize; } return params; } /** 更改了源碼中的assertValue()方法!**/ ,assertValue : function(){ var val = this.getRawValue(), rec = this.findRecord(this.displayField, val); if(!rec && this.forceSelection){ this.setRawValue(""); if(val.length > 0 && val != this.emptyText){ //this.el.dom.value = Ext.value(this.lastSelectionText, ''); this.applyEmptyText(); }else{ this.clearValue(); } this._mapReturnFields_(null); }else{ if(rec){ // onSelect may have already set the value and by doing so // set the display field properly. Let's not wipe out the // valueField here by just sending the displayField. this._mapReturnFields_(rec); if (val == rec.get(this.displayField) && this.value == rec.get(this.valueField)){ return; } val = rec.get(this.valueField || this.displayField); } else { if (val != this.value ) { this._mapReturnFields_(null); } } if (this.getValue() != val) { this.setValue(val); } } } /** onSelect 暫時更改與源碼中一樣! **/ ,onSelect : function(record, index){ if(this.fireEvent('beforeselect', this, record, index) !== false){ this.setValue(record.data[this.valueField || this.displayField]); if(this.fieldMapping!=null){ this._mapReturnFields_(record);//在select事件中設置一次,失去焦點的時候可以再設置一次(add after) } this.collapse(); this.fireEvent('select', this, record, index); } } /** Return **/ ,_mapReturnFields_: function(crec) { // crec combo selected record[Selected Record] if(!Ext.isEmpty(this.callFromGrid)){ //注意這裡會根據你設置的SelectionModel不同而不同,具體情況根據你設置來定 var mrec=this.callFromGrid.getSelectionModel().getSelected();//獲得選中的第一條記錄(即編輯的紀錄) this._mapReturnFieldsExecute_(crec,mrec);//crec是combo選中的紀錄,mrec是combo所在Grid行的紀錄,即把combo中的紀錄設置到Grid中 }else{ this._mapReturnFieldsExecute_(crec); } } ,_mapReturnFieldsExecute_: function(crec, mrec) { // crec combo selected record if(crec!=null){//若選中紀錄時才設置值到其他字段中 if (this.fieldMapping != null) { for(var i=0, len=this.fieldMapping.length; i<len; i++ ) { if (!Ext.isEmpty(this.callFromGrid)) { mrec.set( this.fieldMapping[i].field ,crec.get(this.fieldMapping[i].column) ) ; }else { Ext.getCmp(this.fieldMapping[i].field).setValue( crec.get(this.fieldMapping[i].column) ); Ext.getCmp(this.fieldMapping[i].field).fireEvent( "change"); } } } }else{//否則不只設置值,並且將之前的值清空. if (this.fieldMapping != null) { for(var i=0, len=this.fieldMapping.length; i<len; i++ ) { if (!Ext.isEmpty(this.callFromGrid)) { mrec.set( this.fieldMapping[i].field ,"") ; }else { Ext.getCmp(this.fieldMapping[i].field).setValue("") ; Ext.getCmp(this.fieldMapping[i].field).fireEvent( "change"); } } } } } /** Filter **/ ,_mapFilterFields_: function(bp) { // empty object which is added to store.baseParams if(!Ext.isEmpty(this.callFromGrid)){//如果是在GridPanel或EditorGridPanel中 //注意這裡會根據你設置的SelectionModel不同而不同,具體情況根據你設置來定 var mrec=this.callFromGrid.getSelectionModel().getSelected();//獲得選中的第一條記錄(即編輯的紀錄) this._mapFilterFieldsExecute_(bp,mrec); }else{ this._mapFilterFieldsExecute_(bp); } } ,_mapFilterFieldsExecute_: function(bp, mrec) { // bp:basePrams for combo query;mrec:Grid Edit Record var newParamVal; var oldParamVal; if (this.paramMapping != null) { for(var i=0, len=this.paramMapping.length; i<len; i++ ) { if(!Ext.isEmpty(this.callFromGrid)){//如果是在GridPanel或是EditorGridPanel中 newParamVal = (!Ext.isEmpty(this.paramMapping[i].field))?mrec.get( this.paramMapping[i].field ):this.paramMapping[i].value ; //從設置的參數字段中讀取值 }else{ newParamVal = (!Ext.isEmpty(this.paramMapping[i].field))?Ext.getCmp(this.paramMapping[i].field).getValue():this.paramMapping[i].value; //從設置的 } oldParamVal = this.store.baseParams[this.paramMapping[i].param];//原來查詢參數baseParam中對應字段值 /*以下不用判斷,若判斷的話則第一次之後就會不帶參數,不符合我們的需要。 if (newParamVal != oldParamVal) {//如果參數有變動則查詢否則不查 bp[this.paramMapping[i].param]=newParamVal; } */ bp[this.paramMapping[i].param]=newParamVal; } } } /** 其實就是調整若配置了大小寫配置,則轉化為大小寫! **/ ,getValue : function(){ var v = null; if(this.valueField){ v= Ext.isDefined(this.value) ? this.value : ''; }else{ v= Ext.form.ComboBox.superclass.getValue.call(this); } if (this.initialConfig["caseRestriction"] == "uppercase" && !Ext.isEmpty(v) )v=v.toUpperCase(); return v; } /** proxy exception**/ , proxyException: function(dataProxy, type, action , options , response , arg ) { if(type=="response") { this.afterAjaxFailure(response , options); } else { alert(response.message.substr(0,1500)); } } , afterAjaxFailure: function(response , options) { this.dc____ajaxfailure(response , options); } /** initEvent **/ ,initEvents : function(){ Ext.form.ComboBox.superclass.initEvents.call(this); this.keyNav = new Ext.KeyNav(this.el, { "up" : function(e){ this.inKeyMode = true; this.selectPrev(); }, "down" : function(e){ if(!this.isExpanded()){ this.onTriggerClick(); }else{ this.inKeyMode = true; this.selectNext(); } }, "enter" : function(e){ this.onViewClick(true); //if(this.isExpanded()){ e.stopEvent(); e.stopPropagation(); e.preventDefault(); //} return false; }, "esc" : function(e){ this.collapse(); }, "tab" : function(e){ if (this.forceSelection === true) { this.collapse(); } else { this.onViewClick(false); } return true; }, scope : this, doRelay : function(e, h, hname){ if(hname == 'down' || this.scope.isExpanded()){ // this MUST be called before ComboBox#fireKey() var relay = Ext.KeyNav.prototype.doRelay.apply(this, arguments); if(!Ext.isIE && Ext.EventManager.useKeydown){ // call Combo#fireKey() for browsers which use keydown event (except IE) this.scope.fireKey(e); } return relay; } return true; }, forceKeyDown : true, defaultEventAction: 'stopEvent' }); this.queryDelay = Math.max(this.queryDelay || 10, this.mode == 'local' ? 10 : 250); this.dqTask = new Ext.util.DelayedTask(this.initQuery, this); if(this.typeAhead){ this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this); } if(!this.enableKeyEvents){ this.mon(this.el, 'keyup', this.onKeyUp, this); } } ,onRender : function(ct, position){ dnet.base.AbstractCombo.superclass.onRender.call(this, ct, position); } ,dc____ajaxfailure:function(response , options) { Ext.MessageBox.hide(); var msg = response.responseText; if (msg && msg.length > 2000) { msg = msg.substr(0,2000);} Ext.Msg.show({ // title: 'HTTP:'+response.status+' '+ response.statusText msg: msg ,buttons: {ok:'OK'} //, cancel:'Details' ,scope:this ,icon: Ext.MessageBox.ERROR ,_detailedMessage_:response.responseText }); } }); Ext.reg('xcombo', dnet.base.AbstractCombo);
以下是使用的例子:
此种情况是在Grid中的使用情况,即获取brandName列的值赋给参数brandCode,并把参数作为productCategory这个comboBox的Store的参数来查询结果,并把结果中的你选择的comboBox值对应的divisionCode字段值赋给Grid中的divisionCode列,同时comboBox对应的itemCategoryCode字段值赋给Grid中的
itemCategoryCode列!
var productCategory=new dnet.base.AbstractCombo({ _dataProviderFields_:ItemMaster.ProductCategory$Model ,storeUrl:"/ItemMasterManagement/getField.action?field=ProductCategory",tpl:ItemMaster.tpl ,valueField:ItemMaster.valueField,displayField:ItemMaster.displayField ,queryParam:ItemMaster.queryParam ,callFromGrid:p ,paramMapping:[{param:'brandCode',field:'brandName'}] ,fieldMapping:[{field:'divisionCode',column:'divisionCode'},{field:'itemCategoryCode',column:'itemCategoryCode'}] }); productCategory._createStore_();
发表评论
-
Extjs扩展骨架结构
2012-02-07 16:34 953Ext.ns("N21.DataComp&qu ... -
Extjs 值得一览的项目
2011-11-28 09:50 1314主页: http://www.dnet-ebusiness-s ... -
项目中常用的十个正则表达式
2011-06-08 22:00 1033项目中常用的十个正则表达式 ... -
JavaScript中的DateAdd()方法實現
2011-04-18 22:01 2426function DateAdd (interval,numb ... -
JavaScript中實現數據庫中的dateadd與datediff方法,很實用的!
2011-03-08 17:57 1609SQLServer 中有两个非常好用的日期操作函数:DAT ... -
一个导航栏(可供配置的)【apymenu.js与data-css.js】
2011-01-13 20:20 11791.apymenu.js 控制显示的apymenu.js文件 ... -
重写store中的query方法
2011-01-11 21:05 1261Grid中有时候会统计所有子节点的值进行汇总时,store中只 ... -
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)2
2011-01-11 21:02 5619Ext.ux.maximgb.tg.EditorGridPan ... -
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)
2010-12-06 22:03 6434... -
ExtJs中如何动态设置其选中状态!!
2010-11-30 21:58 11353在Extjs中不要觉得选中状态就是把checkbox的属性ch ... -
ExtJs中FormPanel中遇到radiogroup、checkboxgroup時賦值問題!!!
2010-11-30 21:46 6243在Extjs中常常会遇到各种各样的问题,诸如在FormPane ... -
FireBug問題(求解)
2010-11-11 08:37 1000最近我的Firefox調試工具FireBug出現了問題,就是 ... -
他人Extjs扩展的MicProgressBar
2010-10-25 19:12 1647扩展后組件效果如下图所示: ux组件代码: ... -
javascript中获取日期格式(年、月、日、星期)
2010-10-13 13:01 2943javascript中获取日期 ... -
关于ExtJs中的一个效果(window)
2010-10-11 16:17 2538类Ext.Window animateTarget ... -
JavaScript创始人Brendan Eich访谈录
2010-09-10 08:39 1137...
相关推荐
沙度
基于prometheus官方插件nodeexporter修改
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
opengl
【大厂面试专栏】一份Java程序员需要的技术指南,这里有面试题、系统架构、职场锦囊、主流中间件等,让你成为更牛的自己!_technology-talk
乘用车碟刹刹车片,全球前25强生产商排名及市场份额(by QYResearch).docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
各省、自治区、直辖市社会发展各领域_中国社会统计年鉴数据2006-2021年-最新出炉.zip
KWDB 是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
配置好的vim配置文件,拿来就可以使用,可以快速搜索代码以及文件,函数跳转等,完全可以当一个ide使用。配置文件中都有自己写的中文注释,不懂的可以看注释。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
原文链接:https://blog.csdn.net/zsd12379/article/details/141302581 包含功能: 用户管理:实现用户注册、登录、权限分配及个人信息管理,确保系统访问的安全性。 球员管理:维护球员的基本信息、职业生涯数据、伤病记录等,支持查询与统计分析。 赛程信息管理:记录比赛的日程安排、对阵双方、比赛结果及场地信息,便于赛事组织与追踪。 国家队管理:管理国家队的成员名单、教练团队、历史战绩及国际排名,支持队伍分析与比较。 新闻资讯管理:发布篮球相关的新闻、公告,包括赛事报道、球员动态等,支持内容编辑与审核。 新闻分类管理:对新闻资讯进行分类维护,如赛事新闻、球员专访、技术分析等,便于用户按需浏览。 在线留言管理:提供用户留言功能,收集用户反馈与建议,支持管理员回复与处理,增强用户互动。
可盈保险合同管理系统项目描述 可盈保险合同管理系统是为了满足保险行业对合同管理的精细化、高效化需求而设计的。该系统集成了多个功能模块,旨在帮助保险公司及其代理人更好地管理保险合同,提高工作效率和客户满意度。 系统主要包含以下功能: 首页:作为系统的入口,首页提供了系统的概览和导航功能,方便用户快速了解系统的整体布局和各个功能模块。 个人中心:用户可以在此模块中查看和管理自己的个人信息,包括账户安全、个人信息设置等,提高个性化体验。 修改密码:为了提高账户的安全性,系统允许用户随时修改自己的密码,确保账户不被非法入侵。 基础数据管理:该功能用于管理系统所需的基础数据,如客户信息、保险产品信息等,为其他模块提供数据支持。 公告信息管理:系统支持发布和查看公告信息,方便用户及时了解公司的最新动态和政策变化。 用户管理:管理员可以通过此模块对用户进行管理和审核,确保系统的用户都是合法和可信的。 客户管理:该功能用于管理客户的信息和需求,包括客户的基本信息、购买历史等,有助于销售人员更好地了解客户需求,提高销售效率。 合同管理:系统支持合同的录入、修改、查询和统计等功能,确保合同的准确性
BookChat-v2.4.zip
工业微焦点X射线管.docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
ROHS-电器电子产品有害物质限制使用自愿性认证实施规则
典型卷积神经网络.pptx