- 浏览: 18020 次
- 性别:
- 来自: 广州
最新评论
-
myyugioh:
这样做的话还有一个问题就是,如果后台返回的只有ID,前台要显示 ...
ComboBoxCheckTree动态加载数据解决方案
本文转贴
extjsHacker.js ============= //Extjs 2.X //为grid ColumnModel 的renderer增加gridView的引用 // Ext.grid.GridView.prototype.doRender = function(cs, rs, ds, startRow, colCount, stripe){ var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1; var tstyle = 'width:'+this.getTotalWidth()+';'; // buffers var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r; for(var j = 0, len = rs.length; j < len; j++){ r = rs[j]; cb = []; var rowIndex = (j+startRow); for(var i = 0; i < colCount; i++){ c = cs[i]; p.id = c.id; p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : ''); p.attr = p.cellAttr = ""; p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds,this); p.style = c.style; if(p.value == undefined || p.value === "") p.value = " "; if(r.dirty && typeof r.modified[c.name] !== 'undefined'){ p.css += ' x-grid3-dirty-cell'; } cb[cb.length] = ct.apply(p); } var alt = []; if(stripe && ((rowIndex+1) % 2 == 0)){ alt[0] = "x-grid3-row-alt"; } if(r.dirty){ alt[1] = " x-grid3-dirty-row"; } rp.cols = colCount; if(this.getRowClass){ alt[2] = this.getRowClass(r, rowIndex, rp, ds); } rp.alt = alt.join(" "); rp.cells = cb.join(""); buf[buf.length] = rt.apply(rp); } return buf.join(""); } //extjs 2.x /** * 为combobox添加lookup * @param {} v * @param {} rec */ Ext.form.ComboBox.prototype.setValue = function(v,rec){ var text = v; if(this.valueField){ var r = this.findRecord(this.valueField, v); if(r){ text = r.data[this.displayField]; }else if(this.valueNotFoundText !== undefined){ text = this.valueNotFoundText; } } //添加lookup if (rec && this.record && text) { if(this.lookup){ for(var i = 0 ; i<this.lookup.length ; i++){ this.record.set(this.lookup[i][0],rec.get(this.lookup[i][1])); } } } this.lastSelectionText = text; if(this.hiddenField){ this.hiddenField.value = v; } Ext.form.ComboBox.superclass.setValue.call(this, text); this.value = v; }; //extjs 2.x /** * 为gridEditor添加行数据引用 * @param {} el * @param {} value */ Ext.grid.GridEditor.prototype.startEdit = function(el, value){ if(this.editing){ this.completeEdit(); } this.boundEl = Ext.get(el); var v = value !== undefined ? value : this.boundEl.dom.innerHTML; if(!this.rendered){ this.render(this.parentEl || document.body); } if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){ return; } //alert(this.field); this.startValue = v; this.field.record = this.record;//就加入这一行,让field中获得当前数据行 this.field.setValue(v); this.doAutoSize(); this.el.alignTo(this.boundEl, this.alignment); this.editing = true; this.show(); } //extjs 2.x Ext.lib.Ajax /** * 添加同步ajax * @param {} method * @param {} uri * @param {} callback * @param {} postData * @return {} */ Ext.lib.Ajax.syncRequest = function(method, uri, callback, postData) { var o = this.getConnectionObject(); if (!o) { return null; } else { o.conn.open(method, uri, false); if (this.useDefaultXhrHeader) { if (!this.defaultHeaders['X-Requested-With']) { this.initHeader('X-Requested-With', this.defaultXhrHeader, true); } } if(postData && this.useDefaultHeader && (!this.hasHeaders || !this.headers['Content-Type'])){ this.initHeader('Content-Type', this.defaultPostHeader); } if (this.hasDefaultHeaders || this.hasHeaders) { this.setHeader(o); } this.handleReadyState(o, callback); o.conn.send(postData || null); return o; } }; //extjs 2.x Ext.lib.Ajax /** * 添加同步ajax * @param {} method * @param {} uri * @param {} cb * @param {} data * @param {} options * @return {} */ Ext.lib.Ajax.request = function(method, uri, cb, data, options) { if(options){ var hs = options.headers; if(hs){ for(var h in hs){ if(hs.hasOwnProperty(h)){ this.initHeader(h, hs[h], false); } } } if(options.xmlData){ if (!hs || !hs['Content-Type']){ this.initHeader('Content-Type', 'text/xml', false); } method = (method ? method : (options.method ? options.method : 'POST')); data = options.xmlData; }else if(options.jsonData){ if (!hs || !hs['Content-Type']){ this.initHeader('Content-Type', 'application/json', false); } method = (method ? method : (options.method ? options.method : 'POST')); data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData; } } if ("sync" in options) return this.syncRequest(method, uri, cb, data); return this.asyncRequest(method, uri, cb, data); }; //extjs 2.x 自动重连 /** * Ext.Ajax.request({ url: 'foo.jsp', timeout:2, //重连次数 retryCount:3, //重连后要注意保存新的 newTransactionId retry:function(retryCount,newTransactionId){ alert('failture remain retry count :' + retryCount+'\n' +'newTransactionId : '+newTransactionId.tId); }, //最终的失败函数 failure: function(responseObject){ alert('failture finally :'+responseObject.statusText); }, headers: { 'my-header': 'foo' }, params: { foo: 'bar' } }); */ (function(){ //保存原来的调用代码 var oldRequest=Ext.lib.Ajax.request; //新的增强代码 Ext.lib.Ajax.request = function(method, uri, cb, data, options) { //没有配置就运行老代码 if(!options.retryCount) return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options); //保存原来的失败处理函数 var oldFailure=cb.failure; //添加了自动重连的新的处理函数 cb.failure=function(responseObject){ options.retryCount--; if(options.retryCount) { //注意:自动重连后tId 变化 var newTransactionId = oldRequest.call(Ext.lib.Ajax,method, uri, cb,data, options); //调用重连回调函数 if(options.retry) { options.retry.apply(cb.scope||window, [options.retryCount,newTransactionId]); } } //重连够了,调用真正的失败函数。 else if(oldFailure){ oldFailure.apply(cb.scope||window, [responseObject]); } } //增强配置,再运行老代码 return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options); } })(); //extjs 2.x /** * 为form添加当前数据record * @param {} values * @return {} */ Ext.form.BasicForm.prototype.setValues = function(values){ this.data = values; //添加数据引用,用于以后使用 if(Ext.isArray(values)){ // array of objects for(var i = 0, len = values.length; i < len; i++){ var v = values[i]; var f = this.findField(v.id); if(f){ f.setValue(v.value); if(this.trackResetOnLoad){ f.originalValue = f.getValue(); } } } }else{ // object hash var field, id; for(id in values){ if(typeof values[id] != 'function' && (field = this.findField(id))){ field.setValue(values[id]); if(this.trackResetOnLoad){ field.originalValue = field.getValue(); } } } } return this; } //Extjs 2.x Ext.FormPanel.prototype.initFields = function(){ var f = this.form; var formPanel = this; var fn = function(c){ if(c.isFormField){ c.form = formPanel; //为录入控件添加form的引用 f.add(c); }else if(c.doLayout && c != formPanel){ Ext.applyIf(c, { labelAlign: c.ownerCt.labelAlign, labelWidth: c.ownerCt.labelWidth, itemCls: c.ownerCt.itemCls }); if(c.items){ c.items.each(fn); } } } this.items.each(fn); } //Extjs 2.x Ext.FormPanel.prototype.beforeDestroy = function(){ var fn=function(c){ if (c.isFormField) { if(c.form) { c.form=null; delete c.form; } } if(c.items){ c.items.each(fn); } }; this.items.each(fn); Ext.FormPanel.superclass.beforeDestroy.call(this); this.stopMonitoring(); Ext.destroy(this.form); } Ext.override(Ext.form.BasicForm, { setReadOnly: function(bReadOnly){ this.items.each(function(f) { if (f.isFormField) { f.getEl().dom.readOnly = bReadOnly; // Remove click event handlers if (f instanceof Ext.form.TriggerField) { if (bReadOnly) f.trigger.un('click', f.onTriggerClick, f) else f.trigger.on('click', f.onTriggerClick, f, {preventDefault:true}); if (f instanceof Ext.form.ComboBox) //Alternatively, to check if combobox use: if (f.setEditable)... { if(f.view){ if (bReadOnly){ f.view.un('click', f.onViewClick, f) } else{ f.view.on('click', f.onViewClick, f); } } } } } }); } });
发表评论
-
解决IE8和火狐等浏览器的backspace键退回的问题
2014-02-19 15:11 5831好久没写点东西了,今天写个解决IE8和火狐等浏览器的backs ... -
对JS和一些小技巧总结
2011-02-27 16:47 654对JS和一些小技巧总结 ... -
优化JS的小总结
2010-09-10 16:09 1109优化JS主要为了网 ... -
ComboBoxCheckTree动态加载数据解决方案
2010-06-07 15:51 1692今天 研究了下ComboBoxCheckTree动态加载数据 ... -
页面FROM动态加载数据
2010-06-04 09:54 883页面FROM动态加载数据 想要在页面打开后显示后台的数据 ... -
extjs 技巧 笔记(转)
2010-06-02 08:54 997extjs 技巧 笔记(转) http://yourgame. ... -
关于EXT中GRID各列查询的插件
2009-11-23 09:27 1203关于EXT中GRID各列查询的插件 使用方法: 1引入JS文 ...
相关推荐
ext2文件扩展属性讲解[借鉴].pdf
ext grid 动态扩展 column动态添加
详细介绍了ext2文件系统在内核中的布局,以及ext2的基本数据结构和功能介绍,同时详细的讲解了ext2文件系统中的扩展属性,从基本数据结构入手,剖析了关于扩展属性的详细操作流程。
EXT 自定义的控件扩展 完善 EXT ..........
Ext组件扩展包 - DateTime,非常实用漂亮的日历组件,希望大家喜欢。
Ext的用户扩展控件,支持用户多选,删除,添加下拉列表的选项。非常好用!
Ext2Fsd默认也不会将写操作打开,需要修改注册表文件Ext2fsd.reg,将WritingSupport改为00000001,另外要修改配置文件ext2fsd.inf,将里面WritingSupport改为1。重新导入注册表并启动服务,写操作就可以顺利完成了。...
下拉框的下拉列表改成checkbox的ext下拉列表,呵呵
Ext slider扩展以级范例代码----下载不扣分,回帖加1分,欢迎下载,童叟无欺Ext slider扩展以级范例代码----下载不扣分,回帖加1分,欢迎下载,童叟无欺Ext slider扩展以级范例代码----下载不扣分,回帖加1分,欢迎...
这个压缩包是本人从Ext官方论坛收集的用户扩展控件,针对EXT版本2.x,里面有树表格,图表控件,上传控件,表格过滤控件,通知窗口控件等等。 大部分解压后放入ext的example文件夹下就可以运行,有少数几个需要部署到...
Ext grid 动态添加字段、列扩展, 如何动态添加或者删除一个grid的列
Openlayers扩展插件ol-ext ,2022年4月版本
ext 扩展子列表头 ,列表头分层 ,例子分了三层 ,打开 ANSTS01 即可
EXT TREE 扩展CHECKBOX所需JS loader方法中添加: baseAttrs: {uiProvider: Ext.tree.TreeCheckNodeUI }
Ext扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxyExt扩展dwrproxy
Ext常用扩展插件实例收集如:fieldpanel,iconcombo,OpenFlashChartPlugin等
ext2/3,扩展文件系统,常用于Linux操作系统。是很多Linux发行版的默认文件系统。 Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。 索引节点(inode)是一个结构,它包含了一个...
Ext扩展控件,支持复制,粘贴,剪切 ext plugin Copy Paste cut
Ext的扩展控件,树形表格。!!!! Ext的扩展控件,树形表格。!!!!
预期将是这样的IconCombo要创建的扩展是一个在文字前面能够显示图标的这么一个Ext.form.Combobox。将其中一个功能举例来说,就是要在一块选择里,国家名称连同国旗一并出现。