我所收集的几种ComboBox填充方式: 第一种:数组 var data = [['1', 'Lislie', 'D005', 'male'], ['2', 'Merry', 'D004', 'female'], ['3', 'Edison', 'D003', 'male'], ['4', 'Mark', 'D002', 'male'], ['5', 'Leeon', 'D001', 'male']]; // 格式化数据 var ds = new Ext.data.Store({ proxy : new Ext.data.MemoryProxy(data), // 数据源 reader : new Ext.data.ArrayReader({}, [ // 如何解析 { name : 'id' }, { name : 'name' }, { name : 'depno' }, { name : 'sex' }]) }); ds.load(); //这一句很关键,表是打开页面就加载 this.storeList = new Ext.form.ComboBox({ store : ds, fieldLabel : 'dfsfsd', allowBlank : false, forceSelection : true, valueField : 'id', // option.value displayField : 'name', // option.text typeAhead : true, triggerAction : 'all', emptyText : 'Select a store...', mode : 'local', //如果前面用了load,那么这里就应该用local,默认为remote selectOnFocus : true, width : 135 }); 第二种:本地(内存)简单Json数据 var folders = [{ 'folderId' : '1', 'folderName' : '收信箱' }, { 'folderId' : '2', 'folderName' : '发信箱' }]; //用于下拉列表的store var foldersJsonStore = new Ext.data.SimpleStore({ fields: [{ name: 'folderId', mapping: 'folderId' }, { name: 'folderName', mapping: 'folderName' }], data: folders }); foldersJsonStore.loadData(folders); this.combo = new Ext.form.ComboBox({ fieldLabel : '文件夹', name : 'folderMoveTo', displayField : 'folderName', valueField : 'folderId', typeAhead : true, // 自动将第一个搜索到的选项补全输入 triggerAction : 'all', emptyText : '全部', selectOnFocus : true, forceSelection : true, store : foldersJsonStore, typeAhead : true, lazyInit : false, lazyRender : false, mode : 'local' }); 第三种:动态简单Json数据 // 用于下拉列表的store var foldersJsonStore = new Ext.data.SimpleStore({ proxy : new Ext.data.HttpProxy({ url : './jsp/comboxdata.jsp' }), // 数据源 fields : [{ name : 'folderId', mapping : 'folderId' }, { name : 'folderName', mapping : 'folderName' }] }); this.combo = new Ext.form.ComboBox({ fieldLabel : '文件夹', name : 'folderMoveTo', displayField : 'folderName', valueField : 'folderId', typeAhead : true, // 自动将第一个搜索到的选项补全输入 triggerAction : 'all', emptyText : '全部', selectOnFocus : true, forceSelection : true, store : foldersJsonStore, typeAhead : true, lazyInit : false, lazyRender : false, mode : 'remote' //这里的参数要注意 }); comboxdata.jsp: <%@ page language="java" import="java.util.*,com.googlecode.jsonplugin.JSONUtil"%> <% List list = new ArrayList(); HashMap hm = new HashMap(); hm.put("folderId", "1"); hm.put("folderName", "11111111111"); list.add(hm); hm = new HashMap(); hm.put("folderId", "2"); hm.put("folderName", "2222222222222"); list.add(hm); try { String json = JSONUtil.serialize(list); out.print(json); } catch (Exception ex) { ex.printStackTrace(); } %> 第四种:JsonReader读取到的数据 // 用于下拉列表的store var foldersJsonStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : './jsp/comboxdata.jsp' }), // 数据源 reader : new Ext.data.JsonReader({}, ['folderId', 'folderName']) }); this.combo = new Ext.form.ComboBox({ fieldLabel : '文件夹', name : 'folderMoveTo', displayField : 'folderName', valueField : 'folderId', typeAhead : true, // 自动将第一个搜索到的选项补全输入 triggerAction : 'all', emptyText : '全部', selectOnFocus : true, forceSelection : true, store : foldersJsonStore, typeAhead : true, lazyInit : false, lazyRender : false, mode : 'remote' }); comboxdata.jsp: <%@ page language="java" import="java.util.*,com.googlecode.jsonplugin.JSONUtil"%> <% List list = new ArrayList(); HashMap hm = new HashMap(); hm.put("folderId", "1"); hm.put("folderName", "11111111111"); list.add(hm); hm = new HashMap(); hm.put("folderId", "2"); hm.put("folderName", "2222222222222"); list.add(hm); try { String json = JSONUtil.serialize(list); out.print(json); } catch (Exception ex) { ex.printStackTrace(); } %> 第五种:ScriptTagProxy方式取得的数据 // construct the ComboBox's DataStore var dsCustomer = new Ext.data.Store({ proxy : new Ext.data.ScriptTagProxy({ url : './jsp/comboxdata_1.jsp' }), reader : new Ext.data.JsonReader({ root : 'gridRows', totalProperty : 'totalCount' }, [{ name : 'id', mapping : 'id' }, { name : 'name', mapping : 'name' }]) }); // construct a ComboBox this.customerCmb = new Ext.form.ComboBox({ fieldLabel : '区別', store : dsCustomer, displayField : 'name', valueField : 'id', typeAhead : true, loadingText : 'loading...', width : 160, hiddenName : 'name', //hideTrigger : true, allowBlank : false, minChars : 1, forceSelection : true, triggerAction : 'all' }); comboxdata_1.jsp : <%@ page language="java" import="java.util.*,com.googlecode.jsonplugin.JSONUtil"%> <% String cb = request.getParameter("callback"); if (cb != null) { response.setContentType("text/javascript,charset=utf8"); } List list = new ArrayList(); HashMap hm = new HashMap(); hm.put("id", "1"); hm.put("name", "11111111111"); list.add(hm); hm = new HashMap(); hm.put("id", "2"); hm.put("name", "2222222222222"); list.add(hm); HashMap rehm = new HashMap(); rehm.put("totalCount","1"); rehm.put("gridRows",list); try { String json = JSONUtil.serialize(rehm); System.out.println("json:"+json); out.print(cb + "("); out.print(json); out.print(");"); } catch (Exception ex) { ex.printStackTrace(); } /* System.out.println(cb); String json="{/"totalCount/": 1,/"gridRows/":["+"{/"id/" :1 ,/"name/":/"zhongxiaogang/"},{/"id/" :2 ,/"name/":/"linhuarui/"}]}"; out.write(cb + "("); out.print(json); out.write(");"); */ %> 示例文件: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>ComboBoxTest.html</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" /> <script type="text/javascript" src="ext/ext-base.js"> </script> <script type="text/javascript" src="ext/ext-all.js"> </script> <script type="text/javascript" src="ext/ext-lang-zh_CN.js"> </script> <script> Ext.onReady(function(){ Ext.QuickTips.init(); var data = [['1', 'Lislie', 'D005', 'male'], ['2', 'Merry', 'D004', 'female'], ['3', 'Edison', 'D003', 'male'], ['4', 'Mark', 'D002', 'male'], ['5', 'Leeon', 'D001', 'male']]; // 格式化数据 var ds = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy(data), // 数据源 reader: new Ext.data.ArrayReader({}, [ // 如何解析 { name: 'id' }, { name: 'name' }, { name: 'depno' }, { name: 'sex' }]) }); ds.load(); var storeList = new Ext.form.ComboBox({ store: ds, fieldLabel: 'dfsfsd', allowBlank: false, forceSelection: true, valueField: 'id', // option.value typeAhead: true, displayField: 'name', // option.text triggerAction: 'all', emptyText: 'Select a store...', mode: 'local', selectOnFocus: true, width: 135 }); var folders = [{ 'folderId': '1', 'folderName': '收信箱' }, { 'folderId': '2', 'folderName': '发信箱' }]; //用于下拉列表的store var foldersJsonStore = new Ext.data.SimpleStore({ fields: [{ name: 'folderId', mapping: 'folderId' }, { name: 'folderName', mapping: 'folderName' }], data: folders }); foldersJsonStore.loadData(folders); var combo = new Ext.form.ComboBox({ fieldLabel: '文件夹', name: 'folderMoveTo', store: foldersJsonStore, displayField: 'folderName', valueField: 'folderId', mode: 'local', typeAhead: true, //自动将第一个搜索到的选项补全输入 triggerAction: 'all', emptyText: '全部', selectOnFocus: true, forceSelection: true }); var provinces = [[1, '北京'], [2, '上海']]; var cities = new Array(); cities[1] = [[11, '海淀'], [22, '东城']]; cities[2] = [[33, '黄埔'], [44, '浦东'], [55, '静安']]; var comboProvinces = new Ext.form.ComboBox({ store: new Ext.data.SimpleStore({ fields: ["provinceId", "provinceName"], data: provinces }), listeners: { select: function(combo, record, index){ comboCities.clearValue(); comboCities.store.loadData(cities[record.data.provinceId]); } }, valueField: "provinceId", displayField: "provinceName", mode: 'local', forceSelection: true, blankText: '请选择省份', emptyText: '请选择省份', hiddenName: 'provinceId', editable: false, triggerAction: 'all', allowBlank: true, fieldLabel: '请选择省份', name: 'provinceId', width: 80 }); var comboCities = new Ext.form.ComboBox({ store: new Ext.data.SimpleStore({ fields: ["cityId", 'cityName'], data: [] }), valueField: "cityId", displayField: "cityName", mode: 'local', forceSelection: true, blankText: '选择地区', emptyText: '选择地区', hiddenName: 'cityId', editable: false, triggerAction: 'all', allowBlank: true, fieldLabel: '选择地区', name: 'cityId', width: 80 }); var form = new Ext.form.FormPanel({ region: 'center', labelWidth: 100, border: false, labelAlign: 'right', applyTo: 'local1', height: 200, width: 400, layout: 'form', items: [storeList, combo,comboProvinces,comboCities] }); }); </script> </head> <body> <div id="local1"> </div> </body> </html>