extjs 的combobox 功能很强大,这里不详解,列一下我们在项目中的需求改造。
1 combobox异步获取数据时候,遇到修改状态时,需要将服务器数据回显到combobox的需求。如果采用他自带的方法就很悲剧,使用firebug就会发现有很多ajax请求。这里我们采取一次性将数据全部显示出来的方法,然后使用form.loadRecord类似方法存进去。这个里面就涉及到对combobox的源码改造。我们的解决方案如下:
代码很简单 自己看一下就知道了
Ext.form.ComboBox.prototype.setValue = function(v){ if(v != null && v['value'] != null && v["text"] != null){ if(this.mode === 'remote'){ var _record = new (this.getStore().recordType)(); _record.set("value",v["value"]); _record.set("text",v["text"]); this.getStore().add(_record); this.setValue(v["value"]); } else{ Ext.form.ComboBox.superclass.setValue.call(this, v["text"]); if(this.hiddenField){ this.hiddenField.value = Ext.value(v["value"], ''); } this.value = v["value"]; } } else{ var text = v; if(this.valueField){ var r = this.findRecord(this.valueField, v); if(r){ text = r.data[this.displayField]; }else if(Ext.isDefined(this.valueNotFoundText)){ text = this.valueNotFoundText; } } this.lastSelectionText = text; if(this.hiddenField){ this.hiddenField.value = Ext.value(v, ''); } Ext.form.ComboBox.superclass.setValue.call(this, text); this.value = v; } return this;};