Extjs GridPanel 中放入 Combox显示问题
http://weijun8611-126-com.iteye.com/blog/566201
在项目中使用了extjs的editorgridpanel,但是其中的combobox在选择了相应的选项后,grid中显示的是值域(valueField)的值,而非意愿中的显示域(displayField)的值,经过一些搜索和尝试后找到了一个比较好的解决方法——在定义带combobox的列时配置其renderer的属性。
- var assistItemStore = new Ext.data.JsonStore({
- url:'assist.do',
- baseParams:{
- m : 'listAllLike',
- shopid: shopid ,
- subid: subid
- },
- root:'items',
- fields:[{
- name:'aux_name',
- mapping:'assistName'
- },{
- name:'aux_id',
- mapping:'assistid'
- }]
- });
- header :'项目名称',
- width :100,
- dataIndex :'aux_id',
- editor : new Ext.form.ComboBox({
- autoLoad:true,
- triggerAction : 'all',
- selectOnFocus : true,
- allowBlank : true,
- editable: true,
- displayField:'aux_name',
- valueField:'aux_id',
- minChars:1,
- queryParam:'subname',
- typeAhead: true,
- store: assistItemStore
- }),
- renderer: function(value,metadata,record){
- var index = assistItemStore.find('aux_id',value);
- if(index!=-1){
- return assistItemStore.getAt(index).data.aux_name;
- }
- return value;
- }
这样写之后,选择之后grid中显示了displayField的值,但最初从数据库提取的值仍然显示valueField的值,原因是store的数据是远程取得的,在grid最初的render中还无法从store中查到相对应的displayField的值,于是打算用ajax异步取得displayField的值,但是异步的线程不造成阻塞,无法保证返回值之前能取得相应的数据.后来想出另一个方法,为grid增加一个隐藏列,存放对应的值,在最初提取数据时能够从中获取要显示的值.
- header:'',
- width:10,
- dataIndex:'aux_name',
- hidden:true
- }, {
- header :'项目名称',
- width :100,
- dataIndex :'aux_id',
- editor : new Ext.form.ComboBox({
- autoLoad:true,
- triggerAction : 'all',
- selectOnFocus : true,
- allowBlank : true,
- editable: true,
- displayField:'aux_name',
- valueField:'aux_id',
- minChars:1,
- queryParam:'subname',
- typeAhead: true,
- store: assistItemStore
- }),
- renderer: function(value,metadata,record){
- var index = assistItemStore.find('aux_id',value);
- if(index!=-1){
- return assistItemStore.getAt(index).data.aux_name;
- }
- return record.get('aux_name');
- }
下面记录一个树结构的表格处理方式
- sortable: false,
- text : '部位',
- dataIndex : 'buweiid',
- width: 150,
- editor : combo,
- renderer: function(value,metadata,record) {
- if(combo.store.data.indexOfKey(value) != -1) {
- return combo.store.data.get(value).raw.text;
- }
- return record.raw.buweitext;
- }
- Ext.define('APP.view.Trainbom.TreeGridList', {
- extend : 'Ext.tree.Panel',
- xtype : 'Trainbom_TreeGridList',
- columnLines : true,
- initComponent : function() {
- var me = this;
- me.plugins = [ me.cellEditingPlugin = Ext.create('Ext.grid.plugin.CellEditing') ];
- var combo = Ext.create('APP.lib.DictionaryCombo', {
- name: 'buweiid',
- code: 'CODE_BUWEI'
- });
- Ext.apply(me, {
- store : 'TrainbomStore',
- viewConfig: {
- plugins: {
- ptype: 'treeviewdragdrop',
- containerScroll: true
- }
- },
- columns : [ {
- xtype : 'treecolumn',
- sortable: false,
- text : '机车类型',
- dataIndex : 'traintype',
- width: 150,
- editor : {
- xtype: 'NormalCombo',
- name: 'traintype',
- url: 'SysDictionaryController.do?method=selectListTrain',
- selectOnFocus : true,
- allowOnlyWhitespace : false
- }
- },{
- sortable: false,
- text : '12位编码',
- dataIndex : 'materialcode',
- width: 150,
- editor : 'textfield'
- },{
- sortable: false,
- text : '父编码',
- dataIndex : 'parentmaterialcode',
- width: 150,
- editor : 'textfield'
- },{
- sortable: false,
- text : '部件数量',
- dataIndex : 'fullcount',
- width: 100,
- editor : 'numberfield'
- },{
- sortable: false,
- text : '安装数量',
- dataIndex : 'installcount',
- width: 100,
- editor : 'numberfield'
- },{
- sortable: false,
- text : '部位',
- dataIndex : 'buweiid',
- width: 150,
- editor : combo,
- renderer: function(value,metadata,record) {
- if(combo.store.data.indexOfKey(value) != -1) {
- return combo.store.data.get(value).raw.text;
- }
- return record.raw.buweitext;
- }
- }]
- });
- me.callParent(arguments);
- me.relayEvents(me.getStore(), ['load'], 'store');
- me.on('beforeedit', me.handleBeforeEdit, me);
- },
- getSelecedRecordId : function() {
- var record = this.getSelectionModel().getSelection()[0];
- return record ? record.getId() : '';
- },
- getSelecedRecord : function() {
- var record = this.getSelectionModel().getSelection()[0];
- return record;
- },
- handleBeforeEdit : function(editingPlugin, e) {
- if(e.record.get('id') == 'root') {
- Ext.popup.Msg('提示信息', '字典跟节点不允许编辑');
- return false;
- }
- return true;
- },
- refreshView: function() {
- //this.getView().refresh(); //本地刷新
- var tree = this;
- //tree.setLoading(true, tree.body);
- //服务器端刷新
- this.getStore().reload({mask:true});
- }
- });
Extjs GridPanel 中放入 Combox显示问题的更多相关文章
- Javascript - ExtJs - GridPanel组件
GridPanel组件(Ext.grid.GridPanel)logogram:Ext.grid.Panel | xtype:gridpanel 此类派生自Ext.Panel,创建表格需要两个必须的对 ...
- Extjs GridPanel用法详解
Extjs GridPanel 提供了非常强大数据表格功能,在GridPanel可以展示数据列表,可以对数据列表进行选择.编辑等.在之前的Extjs MVC开发模式详解中,我们已经使用到了GridPa ...
- Server:www121 Server:www120 Server:NWS_SP 内容被散列,并在响应中放入Etag When to Use Entity-Tags and Last-Modified Dates
1 Request URL:http://www.biyao.com/minisite/bzzx 2 Request Method:GET 3 Status Code:200 OK 4 Remote ...
- 在li元素中放入img图片时li的高度问题
在li元素中放入img图片时li的高度会比img图片的高度多出几个像素,解决这个问题只需要将img元素的css设置成vertical-align: middle;就可以解决.
- extjs gridpanel 操作行 得到选中行
extjs gridpanel 操作行 得到选中行的列 在Extjs 3.2.0上适合 var model = grid.getSelectionModel(); model.selectAll(); ...
- Eclipse的workspace中放入Ext JS卡死或OOM的解决方案
Eclipse的workspace中放入Ext JS卡死或OOM的解决方案 原因:是由于Ext JS 的所有的文件js验证 方法一:关于Eclipse解决Ext JS卡死方案: 打开Eclipse的w ...
- 基本操作——word中怎样同一页中放入多张图片
可能很多人在放图片时候,碰见这种情况,习惯性的把图片拖进word,发现不能在一页上很工整的排列.很多人包括我刚开始也纳闷,怎么不能一页中放入几张图片呢,缩放也不想.下面分享一个小技巧给有缘人 以我的w ...
- C语言:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,-主函数中放入一个带头节点的链表结构中,h指向链表的头节点。fun函数找出学生的最高分-使用插入排序法对字符串中的字符进行升序排序。-从文件中找到指定学号的学生数据,读入次学生数据,
//根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> ...
- G4Studio+extjs+highcharts 下在ext4j的panel中放入hightCharts图表
在G4Studio+extjs下.创建一个panel,然后将highCharts图表放入panel中.实现方法例如以下: 首先简单给出的部分代码: Ext.onReady(function() { v ...
随机推荐
- 安装Was liberty之步骤
安装文件下载:http://pan.baidu.com/s/1dDl8PuL 安装三大步骤:拷贝文件,安装VNC和安装WasLiberty 拷贝文件是将需要的文件InstalMgr1.6.2_LNX_ ...
- docker下搭建gitlab
[root@localhost ~]# docker run \ > --name='gitlab' \ > -itd \ > --link gitlab_mysql:mysql \ ...
- Citrix服务器虚拟化之二十九 XenApp 6.5发布服务器上的应用程序
Citrix服务器虚拟化之二十九 XenApp 6.5发布服务器上的应用程序 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1) 服务器桌面:发布场中服务 ...
- 【转】Linux下的多线程编程背景知识
1. 进程和线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(pr ...
- 记一发Hive on tez的配置(Hive 3.1.1, Hadoop 3.0.3, Tez 0.9.1)
直接下载Tez的binary包部署安装是有问题的,因为默认支持hadoop版本为2.7,2.7以上的就需要手动编译了. 下载Tez源码 CD到源码文件夹,mvn install -Dhadoop.ve ...
- Js中/g \s 什么意思
Js中/g \s 什么意思 js里elm.value.replace(/[\s ]+/g, ''),是什么意思 比如/[\s]是什么意思 elm是表单吧.将elm表单的值中的空白字符替换 replac ...
- Python 函数返回多值
返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...
- 深入探讨Linux静态库与动态库的详解(转)
2.生成动态库并使用 linux下编译时通过 -shared 参数可以生成动态库(.so)文件,如下 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静 ...
- 【转发】MVC Log4net
1.引用log4net库类 2.写配置,我一般是写在web.config <configSections> <section name="log4net" typ ...
- 〖Android〗/system/etc/recovery-resource.dat
源代码中的解释:[platform_build/tools/releasetools/ota_from_target_files] # Recovery is generated as a patch ...