有一个combobox,下拉的选项是从服务器读取的,我想在修改操作的时候,能够根据值自动匹配
使用了setValue()方法,
现在的问题是,页面第一次进入的时候,文本框中显示的是 valueField的值,不是displayField中对应的文本.
但是以后的显示都是正常的(只要不重新刷新页面)
代码如下:
使用了setValue()方法,
现在的问题是,页面第一次进入的时候,文本框中显示的是 valueField的值,不是displayField中对应的文本.
但是以后的显示都是正常的(只要不重新刷新页面)
代码如下:
- modelStore : new Ext.data.Store({
- proxy : new Ext.data.HttpProxy({
- url : 'listallmodel.action'
- }),
- reader : new Ext.data.JsonReader({
- root : 'list'
- // totalProperty:'totalCount'
- }, [{
- name : 'modelid',
- mapping : 'modelid'
- }, {
- name : 'model',
- mapping : 'model'
- }]),
- remoteSort : false
- }),
- update_gamefileForm : function(data) {
- var modelStore = this.modelStore;
- modelStore.load();
- var modelField = new Ext.form.ComboBox({
- fieldLabel : '机型',
- name : 'modelid',
- hiddenName : 'modelid',
- allowBlank : false,
- blankText : '机型不能为空',
- readOnly : true,
- triggerAction : 'all',
- anchor : '90%',
- store : modelStore,
- mode : 'local',
- valueField : 'modelid',
- displayField : 'model'
- //value:data.modelid
- });
- //alert(data.modelid);
- modelField.setValue(data.modelid);
- return new Ext.FormPanel({
- labelAlign : 'top',
- frame : true,
- width : 500,
- fileUpload : true,
- items : [modelField, {
- xtype : 'textfield',
- fieldLabel : 'jad文件',
- name : 'jad',
- allowBlank : false,
- anchor : '90%',
- height : 20,
- inputType : 'file'
- }, {
- xtype : 'textfield',
- fieldLabel : 'jar文件',
- name : 'jar',
- allowBlank : false,
- anchor : '90%',
- height : 20,
- inputType : 'file'
- }]
- });
- },
- 搞定了
- new Ext.form.ComboBox({
- allowBlank: false,
- allowNegative: false,
- triggerAction: 'all',
- displayField :'text',
- valueField :'v',
- //mode : 'local',
- id:'test',
- store : new Ext.data.Store({
- autoLoad : true,
- proxy: new Ext.data.MemoryProxy({rows:[{text:'全部',v:'1'},{text:'选项1',v:'2'},{text:'选项2',v:'3'},{text:'...',v:'4'}]}),
- reader: new Ext.data.JsonReader({
- root: 'rows',id:'v',remoteSort : false
- },[{name:'text'},{name:'v',type:'int'}]
- ),
- listeners :{
- load:function(){
- Ext.getCmp('test').setValue(2);
- }
- }
- }),
- editable :false,
- lazyInit : false,
new Ext.form.ComboBox({ allowBlank: false, allowNegative: false, triggerAction: 'all', displayField :'text', valueField :'v', //mode : 'local', id:'test', store : new Ext.data.Store({ autoLoad : true, proxy: new Ext.data.MemoryProxy({rows:[{text:'全部',v:'1'},{text:'选项1',v:'2'},{text:'选项2',v:'3'},{text:'...',v:'4'}]}), reader: new Ext.data.JsonReader({ root: 'rows',id:'v',remoteSort : false },[{name:'text'},{name:'v',type:'int'}] ), listeners :{ load:function(){ Ext.getCmp('test').setValue(2); } } }), editable :false, lazyInit : false,
用这样的方法可以起到初始化的作用。
我查了一下ComboBox的源码,其中onLoad事件是这样写的:
onLoad : function(){
if(!this.hasFocus){
return;
}
...
后面的是关于初始化value一些操作,但原因在一开头没有focus就return了 - Ext.getCmp('test').setValue(2);是把combox里的valueField值初始化了!
- 哈哈,我终于搞明白了!
- 用这个扩展可以解决问题
- Ext.namespace('ux');
- Ext.ux.DefaultingComboBox = function(config) {
- Ext.ux.DefaultingComboBox.superclass.constructor.call(this, config);
- };
- Ext.extend(Ext.ux.DefaultingComboBox, Ext.form.ComboBox, {
- setValue : function(v) {
- // 如果远程数据还没有加载,在设值之前先加载一次
- if (this.mode == 'remote' && this.store.getCount() == 0) {
- this.store.on("load", function() {
- Ext.ux.DefaultingComboBox.superclass.setValue.call(this, v);
- }, this, {
- single : true
- });
- this.doQuery(this.allQuery, true);
- } else {
- Ext.ux.DefaultingComboBox.superclass.setValue.call(this, v);
- }
- }
- });