- 浏览: 539708 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (174)
- Groovy (28)
- Grails (14)
- DHTML (5)
- JS (4)
- jQuery (16)
- JAVA (16)
- Eclipse (4)
- Hibernate (2)
- Resin (2)
- Oracle (25)
- Maven (4)
- Struts2 (1)
- WebWork2 (3)
- Tomcat (2)
- Windows7 (4)
- Griffon (2)
- PowerDesigner (1)
- Pro*C (2)
- JDK (1)
- 乱码 (2)
- WebService (3)
- .NET (1)
- 性能 (2)
- 安装 (1)
- 命令行 (1)
- function (1)
- type (1)
- Mysql (1)
- 同步 (1)
- Synchronized (1)
- json (3)
- Office (1)
- Visio (1)
- 自定义形状 (1)
- jsong (0)
- gson (1)
- fastjson (1)
- EM (1)
- DB2 (6)
- Sequence (1)
- RHEL5.x (1)
- WAS6.1 ND (1)
- SQL (1)
- -964 (1)
- Linux (4)
- Date (1)
- Format (1)
- Add (1)
- SHELL (1)
- CSS (2)
- Bootstrap (1)
- nginx (1)
- Openresty (2)
- JWPlayer (1)
- showdoc (1)
- 常用网址 (1)
- lua (2)
- SpringBoot (1)
- Office pdf linux (1)
最新评论
-
纵观全局:
Great
阿里巴巴开源JSON解析组件FastJson简单使用笔记 -
guxuede:
...
Groovy编程技巧 -
a1439226817:
groovy用的多吗?我还没发现有哪个java项目在用这个?
Groovy同步 -
晴子9034:
在网上搜到的几乎全是说满了就扩充。但是我有个疑问,满了就扩充, ...
解决DB2 SQLCODE=-964日志文件满的问题 -
在世界的中心呼喚愛:
好东西啊,就用这个包。
阿里巴巴开源JSON解析组件FastJson简单使用笔记
转载地址:http://www.iteye.com/problems/14728
问题描述,window中我放置了两个combobox,在tbar上设置按钮,负责显示window,并设置cancel按钮handler中函数,window.hide()令其隐藏。
一:单击tbar,window出来combobox,我没去动他,然后直接点cancel按钮,window隐藏,再点tbar,window正常显示出来,并且window中的组件完好。
二:问题出现,当我点开window,并且选了combobox中的选项后,我点cancel,也就是window.hide(),然后我又把window打开,这时,window中的combobox不见了。只有fieldLabel的文字。
请大家帮忙。
答案:
两种解决方法:
1. window组件不应该在显示window的函数中new,显示函数只负责window的show或hide方法
2. window内的combobox组件不要加id属性
我成功的代码:
问题描述,window中我放置了两个combobox,在tbar上设置按钮,负责显示window,并设置cancel按钮handler中函数,window.hide()令其隐藏。
一:单击tbar,window出来combobox,我没去动他,然后直接点cancel按钮,window隐藏,再点tbar,window正常显示出来,并且window中的组件完好。
二:问题出现,当我点开window,并且选了combobox中的选项后,我点cancel,也就是window.hide(),然后我又把window打开,这时,window中的combobox不见了。只有fieldLabel的文字。
请大家帮忙。
handler:function(){ var gradeWin = new Ext.Window({ title : '添加年级', width : 300, height : 150, plain : true, closeAction : 'hide', layout : 'form', labelWidth : 80, constrain : true, // windows不超过浏览器 buttonAlign : 'center', modal : true,// 生成背景半透明div defaultType : 'textfield', defaults:{width:160}, bodyStyle : 'padding:10px;', buttons : [{ text : '确定', handler:function(){ // var stuTreeNode = Ext.getCmp('stuTree'); // alert(Ext.getCmp('myTree')) ; var tree = Ext.getCmp('myTree') ; var stuNode = tree.getNodeById('stuTree') ; var text = Ext.getCmp('gradeName').getValue().toString(); var type = Ext.getCmp('gradeType').getValue(); if(text != ''&& type != ''){ var node = new Ext.tree.TreeNode({ text:text, leaf:true }); //stuNode.isLeaf = false ; stuNode.appendChild(node); gradeWin.hide(); }else Ext.Msg.alert('错误提示','有空选项,请重新填写'); //alert(tree.getNodeById('stuTree')); }//ok function }, { text : '取消', handler : function() { gradeWin.hide(); } }], items :[{ xtype:'combo', fieldLabel:'年级名称', id:'gradeName', displayField : "text", valueField : "value", mode : 'local', triggerAction : 'all', store : new Ext.data.SimpleStore({ fields : ['value', 'text'], data : [['2004级', '2004级'],['2005级', '2005级'], ['2006级', '2006级'],['2007级', '2007级'],['2008级', '2008级'],['2009级', '2009级'],['2010级', '2010级'],['2011级', '2011级'],['2012级', '2012级'],['2013级', '2013级'],['2014级', '2014级']] }) },{ xtype:'combo', fieldLabel:'年级类型', id:'gradeType', readOnly : true, displayField : "text", valueField : "value", mode : 'local', triggerAction : 'all', store : new Ext.data.SimpleStore({ fields : ['value','text'], data : [['已毕业', '已毕业'],['未毕业', '未毕业']] }) }]//items }) ;//end gradeWin gradeWin.show(); }
答案:
2009-04-13 mgssnake (中级程序员) 楼主的做法不对,你既然将gradeWin对象放在hanlder事件中创建的话,那你多次点击后,就创建了多个gradeWin对象,你把gradeWin创建的部分放在外部即可,在hanlder调用的时候把gradeWin.show();出来即可。
提问者对于答案的评价: 哦,明白了。之前我也是把hide() 改成 close(); 但总觉得效率不高,之后发现这样的问题出现的原因是因为加了Id属性,由于id相同,所以第二次点出的window里没有了里面的组件。
两种解决方法:
1. window组件不应该在显示window的函数中new,显示函数只负责window的show或hide方法
2. window内的combobox组件不要加id属性
我成功的代码:
Ext.namespace("sf.or"); Ext.extend(demo.module,{ init: function(){ Ext.Ajax.on("beforerequest", function(){_grid.loadMask.show();}); Ext.Ajax.on("requestcomplete", function(){_grid.loadMask.hide();}); Ext.Ajax.on("requestexception", function(){_grid.loadMask.hide();}); this.configs = { url: { list: contextPath + 'outRequest/list', update: contextPath + 'outRequest/update', geAvaliableDrivers: contextPath + 'carInfo/getAvailableDrivers', combo: { cars: contextPath + 'carInfo/comboCars', dscr: contextPath + 'default/getComboList?domain=dicSendCarReason', dd: contextPath + 'default/getComboList?domain=dicDirection' } }, tpl: new Ext.XTemplate( '<table width="100%" id="expander-table" cellpadding="0">', '<tr><td class="driverList"><b>审批人:</b>{disApprovePersons}', '</td><td colspan="2" class="driverList"><b>已审批人:</b>{approvedPersions}</td></tr>', '<tr><td class="driverList"><h2>出车理由:</h2>', '<ul><li>{reason}</li></ul>', '</td><td class="driverList"><h2>去向:</h2>', '<ul><li>{direction}</li></ul>', '</td><td class="driverList"><h2>备注:</h2><ul><li>{memo}</li></ul>', '</td></tr></table>' ), record: Ext.data.Record.create([ {name: 'id', type: 'int'}, {name: 'car'}, {name: 'car.id'}, {name: 'car.carNo'}, {name: 'driver'}, {name: 'driver.id'}, {name: 'driver.account.name'}, {name: 'requester.name'}, {name: 'requestDate', type : 'date', dateFormat : 'Y-m-d H:i:s'}, {name: 'sendOutDate', type : 'date', dateFormat : 'Y-m-d H:i:s'}, {name: 'backDate', type : 'date', dateFormat : 'Y-m-d H:i:s'}, {name: 'carCfg.approvePersions'}, {name: 'disApprovePersons'}, {name: 'carCfg.exceptiondateFlag'}, {name: 'approvedPersions', type: 'string'}, {name: 'approveFlag', type: 'int'}, {name: 'approveFlagRate', type: 'int'}, {name: 'reason', type: 'string'}, {name: 'direction', type: 'string'}, {name: 'flag', type: 'int'}, {name: 'memo', type: 'string'} ]) }; this.expander = new Ext.grid.RowExpander({tpl : this.configs.tpl}); this.approveFlagColumn = new Ext.ux.grid.ProgressColumn({ header: "审批进度", dataIndex: 'approveFlagRate', width: 15, //textPst : '%', colored: true }); this.columns = [ this.expander, {header: '车辆编号', dataIndex: 'car.carNo', width: 15}, {header: '驾驶员', dataIndex: 'driver.account.name', width: 20}, {header: '派车人/日期', dataIndex: 'requester.name', width: 35, renderer: function(v, c, r){ return v + "(" + (r.data['requestDate'] ? r.data['requestDate'].dateFormat('Y-m-d H:i:s') : '') + ")"; }}, {header: '出发时间 | 返回时间', dataIndex: 'sendOutDate', width: 40, renderer: function(v, c, r){ return (v ? v.dateFormat('Y-m-d H:i:s') : '') + (r.data['backDate'] ? (" | " + r.data['backDate'].dateFormat('Y-m-d H:i:s')) : ''); } }, {header: '特殊日?', dataIndex: 'carCfg.exceptiondateFlag', width: 12, renderer: function(v){ return v == 2 ? '<image src="' + contextPath + 'images/flag_red.png" align="absmiddle">' : ''; }}, this.approveFlagColumn, {header: '状态', dataIndex: 'flag', width: 15, renderer: function(v){ var renderMsg = ''; switch (v){ case 0 : renderMsg = "<font color='red'>任务执行中</font>"; break; case 1 : renderMsg = "待命"; break; case 2 : renderMsg = "<font color='green'>任务结束</font>"; break; default : renderMsg = "<span color='red'>状态错误</span>"; } return renderMsg; }} ]; this.stores = { list: new Ext.data.Store({ url : this.configs.url.list, reader : new Ext.data.JsonReader({ totalProperty : 'totalCount', root : 'result' }, this.configs.record ) }) }; this.combos = {}; this.functions = { lineColor: function(record,rowIndex,rowParams,store){ var _flag = record.data['flag']; var _css; if(_flag == "0") _css = 'x-grid-record-red'; else if(_flag == "2") _css = 'x-grid-record-green'; else _css = 'x-grid-record-gray'; return _css; }, add: function(){ var win = new sf.or.dataWindow({owner:this}); win.setTitle('<image src="' + contextPath + 'images/edit.png" align="absmiddle"> 填写派车单'); win.setSize(win.fp.width, win.fp.height); win.show(); win.url = _configs.url.update; win.fp.form.reset(); //win.gridRole.getSelectionModel().clearSelections(); }, edit: function(){ var rec = _grid.getSelectionModel().getSelected(); if (rec){ var win = new sf.or.dataWindow({owner:this}); win.setTitle('<image src="' + contextPath + 'images/edit.png" align="absmiddle"> 编辑派车单'); win.setSize(win.fp.width, win.fp.height); win.show(); //win.url = 'qo/user/updateUser/'+rec.data.id; win.fp.form.reset(); win.fp.form.loadRecord(rec); /*if (rec.data.car){ alert(111) win.fp.form.findField('car').setValue(rec.data.car.id); win.fp.form.findField('car').setRawValue(rec.data.car.carNo); //win.fp.form.findField('car').setFieldValue(rec.data.car.id, rec.data.car.carNo); }*/ } else { Ext.Msg.show({title: "操作提示", msg: "警告:至少选择一条记录进行编辑!", buttons: Ext.Msg.OK, icon : Ext.Msg.WARNING }); } } }; sf.or.dataWindow = Ext.extend(Ext.Window, { closeAction:'hide', layout:'fit', modal:true, initComponent:function(){ var conf = { border:false, buttons:[ { text:'保存', handler:this.onSave.createDelegate(this) }, { text:'取消', handler:this.onCancel.createDelegate(this) } ] }; Ext.apply(this, conf); sf.or.dataWindow.superclass.initComponent.call(this); this.createForm(); this.add(this.fp); }, createForm:function(){ var driverStore = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url: _configs.url.geAvaliableDrivers}), reader: new Ext.data.JsonReader({},['id','name']) }); this.carStore = new Ext.data.Store({ baseParams: {userId: g_userId}, proxy: new Ext.data.HttpProxy({url: _configs.url.combo.cars}), reader: new Ext.data.JsonReader({},['id','carNo']), autoLoad:true }); this.dicSendCarReasonStore = new Ext.data.Store({ autoLoad: true, proxy: new Ext.data.HttpProxy({ url: _configs.url.combo.dscr }), reader: new Ext.data.JsonReader({}, [ {name : 'id'}, {name : 'content'}, {name : 'flag'}, {name : 'memo'} ]) }); this.dicDirectionStore = new Ext.data.Store({ autoLoad: true, proxy: new Ext.data.HttpProxy({ url: _configs.url.combo.dd }), reader: new Ext.data.JsonReader({}, [ {name : 'id'}, {name : 'content'}, {name : 'flag'}, {name : 'memo'} ]) }); var driverCombo = new Ext.form.ComboBox({ //id: 'driver', name: 'driver.account.name', fieldLabel: '选择驾驶员', emptyText: '请选择驾驶员...', valueField: 'id', displayField: 'name', //hiddenName: 'driver.id', store: driverStore, //editable: true, readOnly: true, triggerAction: 'all', mode: 'local', width: 200, allowBlank: false }); [color=red][size=large]this.carCombo = new Ext.form.ComboBox({ //id: 'car', name: 'car.carNo', fieldLabel: '选择车辆', emptyText: '请选择车辆...', store: this.carStore, valueField: 'id', displayField: 'carNo', //hiddenName: 'car.id', //editable: true, readOnly: true, triggerAction: 'all', mode: 'local', width: 200, allowBlank: false, listeners: { select: function(combo, record, index){ driverCombo.clearValue(); driverStore.load({params:{carId: combo.value}}); } } });[/size][/color] this.sendOutDate = new Ext.ux.DateTime({ name: 'sendOutDate', fieldLabel:'出发时间', anchor:'-18', readOnly: true, timeFormat:'H:i:s', timeWidth: 80, timeConfig: { altFormats: 'H:i:s', allowBlank: false }, dateFormat: 'Y-m-d', dateWidth: 80, dateConfig: { altFormats: 'Y-m-d|Y-n-d', allowBlank: false } }); this.backDate = new Ext.ux.DateTime({ name: 'backDate', fieldLabel:'返回时间', anchor:'-18', readOnly: true, timeFormat:'H:i:s', timeWidth: 80, timeConfig: { altFormats: 'H:i:s' }, dateFormat: 'Y-m-d', dateWidth: 80, dateConfig: { altFormats: 'Y-m-d|Y-n-d' } }); this.dicSendCarReasonCombo = new Ext.form.ComboBox({ name: 'reason', fieldLabel: '出车理由', store: this.dicSendCarReasonStore, valueField: 'content', displayField: 'content', //hiddenName: 'reason', width: 240, mode: 'local', triggerAction: 'all', selectOnFocus: true, allowBlank: false }); this.dicDirectionCombo = new Ext.form.ComboBox({ name: 'direction', fieldLabel: '去向', store: this.dicDirectionStore, valueField: 'content', displayField: 'content', //hiddenName: 'direction', width: 240, mode: 'local', triggerAction: 'all', selectOnFocus: true, allowBlank: false }); this.fp = new Ext.form.FormPanel({ width:400, height:340, //fieldWidth:120, labelAlign:'right', border:false, items:{ xtype:'tabpanel', activeTab:'0', deferredRender:false, border:false, height:300, items:[{ title:'基本信息', items:{ border:false, bodyStyle:'padding:10px;', layout:'form', defaultType:'textfield', //defaults:{width:100}, items:[ this.carCombo, driverCombo, this.sendOutDate, this.backDate, this.dicSendCarReasonCombo, this.dicDirectionCombo, { xtype: 'textarea', fieldLabel:'备注', name:'memo', width:250 } ] } }] } }); }, onSave:function(){ if (this.fp.form.isValid() == false) return; this.fp.form.submit({ waitTitle: '提示', waitMsg: demo.working, url: this.url, //params:{ roleIds:roleIds.join(',') }, success:this.onSaveSuccess.createDelegate(this), failure:this.onSaveFailure.createDelegate(this) }) }, onSaveSuccess:function(){ _grid.getStore().reload(); this.hide(); }, onSaveFailure:function(form,action){ Ext.Msg.show({title: '操作提示', msg: action.result.info, icon: Ext.Msg.ERROR, buttons: Ext.Msg.OK}); }, onCancel:function(){ this.hide(); } }); this.bbar = new Ext.PagingToolbar({ pageSize: iPageSize, store : this.stores.list, plugins : new Ext.ux.Andrie.pPageSize(), displayInfo : true, items : [ '-', {xtype: 'button', iconCls: 'btn_insert', text: '增加', handler: this.functions.add, tooltip: '新增派车单' }, {xtype: 'button', iconCls: 'btn_modify', text: '编辑', handler: this.functions.edit, tooltip: '编辑派车单' } ] }); this.editorGridPanel = new Ext.grid.EditorGridPanel({ bodyStyle: 'width:100%', viewConfig: {forceFit: true, getRowClass: this.functions.lineColor}, store: this.stores.list, sm: new Ext.grid.RowSelectionModel(), columns: this.columns, loadMask: {msg: demo.working}, plugins: [this.expander, this.approveFlagColumn], //clicksToEdit: 1, //autoExpandColumn : 'memo', //tbar: this.tbar, bbar: this.bbar }) var _configs = this.configs; var _combos = this.combos; var _stores = this.stores; var _functions = this.functions; var _grid = this.editorGridPanel; this.main.add(this.editorGridPanel); this.main.doLayout(); _stores.list.load({ params: {start: 0, limit: iPageSize} }); } });
相关推荐
2. `checkbox`:`Ext.form.Checkbox`是用于创建复选框的组件,用户可以选择或取消选择多个选项。 3. `combo`:`Ext.form.ComboBox`是下拉列表框组件,允许用户在预设的选项中进行选择,同时可以提供搜索功能以便...
在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...
### Ext组件概述与详解 #### 一、Ext基础组件 **1.1 Box Component (Ext.BoxComponent)** - **xtype**: `box` - **功能描述**:Box Component 是一个非常基本的 Ext 组件,主要用于定义具有边框和其他布局属性的...
本示例探讨如何利用Ext JS中的`Ext.form.field.ComboBox`组件,结合Java后端和JSON数据格式,来创建这样一个功能。 `Ext.form.field.ComboBox`是Ext JS框架中一个强大的组件,它提供了下拉列表的功能,可以用于创建...
在Ext.js中,`Ext.Store`是用来管理数据的类,它通常与各种UI组件(如Grid、ComboBox等)关联,用于存储和检索数据。然而,获取`Ext.Store`的方式并不像获取其他Ext组件那样直接,因为Store并不是一个具有可视界面的...
**Ext.form.ComboBox** 是一个下拉列表框组件,用于提供可选列表供用户选择。 - **allQuery**: 类型为 `String`,当用户在组合框中输入时,此属性定义所有匹配的项都将显示在列表中。 - **autoCreate**: 类型为 `...
总的来说,`Ext.form.TextField`是EXT框架中不可或缺的一部分,它提供了一种简单且灵活的方式来创建和管理用户输入,是构建Web表单和交互界面的关键组件。通过研究这个示例,开发者可以更好地掌握EXT框架的使用,...
【Ext 3.x + Ext 2.x 下拉树 Ext.ux.ComboBoxTree】是基于ExtJS框架的一个组件,它结合了下拉框(ComboBox)和树形控件(TreePanel)的功能,提供了一种用户友好的选择界面。在网页应用中,这种控件常用于展示层级...
comboBox.on('select', function(comboBox, record, index) { console.log('用户选择了:' + record.get('text')); }); ``` 5. **MyJsp.jsp关联**: 在提供的文件`MyJsp.jsp`中,可能包含了创建ComboBox和处理...
Ext.grid.EditorGridPanel是Ext JS库中的一个组件,主要用于创建具有可编辑单元格的表格。这个组件在数据展示和编辑方面提供了丰富的功能,是构建数据密集型应用的理想选择。下面将详细阐述其特点、工作原理及如何...
用EXT来实现下拉框ComboBox 下拉框可以实现分页
在给定的标题“Ext ComboBox 下拉多选框带搜索功能”中,我们关注的是一个特别的ComboBox实现,它不仅允许用户从下拉列表中选择多个选项,还具备搜索功能,使得用户可以更高效地找到他们想要的选择项。 ComboBox在...
ExtJS的ComboBox是一个非常强大的组件,它用于创建下拉选择框。在Web应用程序中,我们经常需要实现二级联动效果,即一个ComboBox的选择会影响另一个ComboBox的显示内容。这在数据关联和筛选场景中尤为常见,例如省份...
这种组件在数据选择上非常实用,尤其当数据层级关系复杂时,可以方便地进行多选或单选操作。下面我们将深入探讨ComboboxTree的实现原理、主要功能以及如何在实际项目中应用。 1. **ComboboxTree的基本概念** ...
Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...
"ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...
在本文中,我们将深入探讨如何使用Ext 2.0的ComboBox组件实现省份和城市联动选择框的功能。Ext是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括ComboBox,用于创建下拉选择框。在这个例程中,我们将看到...
53、Ext.form.DateField类 ………… 45 54、Ext.form.ComboBox类 ……………… 46 55、Ext.form.TimeField类 ………… 47 56、Ext.menu.Menu类 ………………… 50 57、Ext.menu.BaseItem类 …………… 50 58、Ext....
在本项目中,"Ext下拉树、下拉表格"指的是使用Ext库实现的两种交互式组件:下拉树(ComboBox with Tree)和下拉表格(ComboBox with Grid)。这两种组件都是在输入框中展示可选择的列表,但呈现形式不同,下拉树以...