function getInsertForm() { if (!insertForm) { insertForm = new Ext.FormPanel({ labelWidth : 100, monitorValid : true,// 把有formBind:true的按钮和验证绑定 baseCls : 'x-plain', autoHeight : true, frame : true, defaults : { width : 200 }, defaultType : 'textfield',// 默认字段类型 // 定义表单元素 items : [{ fieldLabel : '标题', name : 'title', allowBlank : false }, { fieldLabel : '租金', name : 'hireprice' }, { fieldLabel : '联系人', name : 'linkman' }, { fieldLabel : '联系电话', name : 'linktel' }, { fieldLabel : '几室', xtype : "combo", hiddenName : "room",// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到真正的值的。 store : new Ext.data.SimpleStore({ fields : ['a', 'b'], data : [['1', '一'], ['2', '二'], ['3', '三']] }), valueField : 'a', displayField : 'b', mode : 'local', triggerAction : 'all', forceSelection : true, selectOnFocus : true, editable : false, readOnly : true, emptyText : "无限制!" }, { fieldLabel : '几厅', xtype : "combo", hiddenName : "ting",// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到真正的值的。 store : new Ext.data.SimpleStore({ fields : ['a', 'b'], data : [['1', '一'], ['2', '二'], ['3', '三']] }), valueField : 'a', displayField : 'b', mode : 'local', triggerAction : 'all', forceSelection : true, selectOnFocus : true, editable : false, readOnly : true, emptyText : "无限制!" }, { fieldLabel : "区域", xtype : 'combo', store : new Ext.data.SimpleStore({ fields : ['id', 'name'], data : Ext.grid.areaComboBoxItems }), valueField : "id", displayField : "name", mode : 'local', forceSelection : true,// 必须选择一项 emptyText : '请选择区域...',// 默认值 name : "area", hiddenName : "areaId",// hiddenName才是提交到后台的input的name editable : false,// 不允许输入 triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。 listeners : { select : function(combo, record, index) { houseService.findStreetsByAreaId(combo.value, function(data) { if (data != null) { var list2 = []; for (var i = 0; i < data.length; i++) { list2[i] = [data[i].id, data[i].sname]; } Ext.getCmp('child_id1') .clearValue(); Ext.getCmp('child_id1').store .loadData(list2); } }); } } }, { fieldLabel : "街道", xtype : 'combo', store : new Ext.data.SimpleStore({ fields : ['id', 'name'], data : [] }), valueField : "id", displayField : "name", // 数据是在本地 mode : 'local', forceSelection : true,// 必须选择一项 emptyText : '请选择街道...',// 默认值 editable : false,// 不允许输入 triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。 allowBlank : false,// 该选项值不能为空 id : 'child_id1', name : "street", hiddenName : "streetId" }, { fieldLabel : '房屋设施', xtype : 'textarea', name : 'housething' }], buttons : [{ text : '保存', formBind : true, type : 'submit', // 定义表单提交事件 handler : function() { if (insertForm.form.isValid()) {// 验证合法后使用加载进度条 // 提交到服务器操作 insertForm.form.doAction('submit', { url : 'house!saveOrUpdate.action',// 文件路径 method : 'post',// 提交方法post或get params : '', // 提交成功的回调函数 success : function(retForm, retAction) { Ext.MessageBox.alert('提示', '保存数据成功!'); win.hide(); var totalCount = ptb.store .getTotalCount(); var pageSize = ptb.pageSize; var div = parseInt(totalCount / pageSize); var mol = totalCount % pageSize; ptb.cursor = div * pageSize; ds.load({ params : { start : ptb.cursor, limit : ptb.pageSize } }); }, failure : function() { Ext.Msg.alert('错误', '服务器出现错误请稍后再试!'); }, waitMsg : '保存数据...' }); } } }, { text : '重置', handler : function() { insertForm.form.reset(); }// 重置表单 }, { text : '关闭', handler : function() { win.hide(); }// 关闭窗口 }] }); } insertForm.show(); return insertForm; }