圈子首页 ajax EXT 论坛

combobox初始值的问题

lu_pp 2008-07-22
有一个combobox,下拉的选项是从服务器读取的,我想在修改操作的时候,能够根据值自动匹配

使用了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'
			}]
		});
	},
yneos 2008-07-22
同样遇到此问题,期待中
yneos 2008-07-23
搞定了
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了
yneos 2008-07-23
刚才代码没发好,重发一次:
new Ext.form.ComboBox({
allowBlank: false,
allowNegative: false,
triggerAction: 'all',
displayField :'text',
valueField :'v',
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
})
yneos 2008-07-23
在store的onload事件中用setValue去初始化comboBox的值
popl2003 2008-07-23
学习了,谢谢分享..哈哈!不过这样的是不是麻烦了 难道Ext没有更好的办法吗?
lu_pp 2008-07-23
确实是可以用,非常感谢,再BS一下JAVAEYE的某些人,帮不了人
还把我的帖子评成新手
lu_pp 2008-07-23
这样的灵活性不是很强,我现在遇到了,不能把后台传来的值导入进去了
比较麻烦啊
chenxiaoji 2008-07-23
Ext.getCmp('test').setValue(2); 是什么意思?直接将combobox赋值为2吗?
lu_pp 2008-07-24
chenxiaoji 写道
Ext.getCmp('test').setValue(2); 是什么意思?直接将combobox赋值为2吗?

是的,valueField里面的