http://weijun8611-126-com.iteye.com/blog/566201

在项目中使用了extjs的editorgridpanel,但是其中的combobox在选择了相应的选项后,grid中显示的是值域(valueField)的值,而非意愿中的显示域(displayField)的值,经过一些搜索和尝试后找到了一个比较好的解决方法——在定义带combobox的列时配置其renderer的属性。

  1. var assistItemStore = new Ext.data.JsonStore({
  2. url:'assist.do',
  3. baseParams:{
  4. m : 'listAllLike',
  5. shopid: shopid ,
  6. subid: subid
  7. },
  8. root:'items',
  9. fields:[{
  10. name:'aux_name',
  11. mapping:'assistName'
  12. },{
  13. name:'aux_id',
  14. mapping:'assistid'
  15. }]
  16. });

  

  1. header :'项目名称',
  2. width :100,
  3. dataIndex :'aux_id',
  4. editor : new Ext.form.ComboBox({
  5. autoLoad:true,
  6. triggerAction : 'all',
  7. selectOnFocus : true,
  8. allowBlank : true,
  9. editable: true,
  10. displayField:'aux_name',
  11. valueField:'aux_id',
  12. minChars:1,
  13. queryParam:'subname',
  14. typeAhead: true,
  15. store: assistItemStore
  16. }),
  17. renderer: function(value,metadata,record){
  18. var index = assistItemStore.find('aux_id',value);
  19. if(index!=-1){
  20. return assistItemStore.getAt(index).data.aux_name;
  21. }
  22. return value;
  23. }

  

这样写之后,选择之后grid中显示了displayField的值,但最初从数据库提取的值仍然显示valueField的值,原因是store的数据是远程取得的,在grid最初的render中还无法从store中查到相对应的displayField的值,于是打算用ajax异步取得displayField的值,但是异步的线程不造成阻塞,无法保证返回值之前能取得相应的数据.后来想出另一个方法,为grid增加一个隐藏列,存放对应的值,在最初提取数据时能够从中获取要显示的值.

  1. header:'',
  2. width:10,
  3. dataIndex:'aux_name',
  4. hidden:true
  5. }, {
  6. header :'项目名称',
  7. width :100,
  8. dataIndex :'aux_id',
  9. editor : new Ext.form.ComboBox({
  10. autoLoad:true,
  11. triggerAction : 'all',
  12. selectOnFocus : true,
  13. allowBlank : true,
  14. editable: true,
  15. displayField:'aux_name',
  16. valueField:'aux_id',
  17. minChars:1,
  18. queryParam:'subname',
  19. typeAhead: true,
  20. store: assistItemStore
  21. }),
  22. renderer: function(value,metadata,record){
  23. var index = assistItemStore.find('aux_id',value);
  24. if(index!=-1){
  25. return assistItemStore.getAt(index).data.aux_name;
  26. }
  27. return record.get('aux_name');
  28. }

  

下面记录一个树结构的表格处理方式

  1. sortable: false,
  2. text : '部位',
  3. dataIndex : 'buweiid',
  4. width: 150,
  5. editor : combo,
  6. renderer: function(value,metadata,record) {
  7. if(combo.store.data.indexOfKey(value) != -1) {
  8. return combo.store.data.get(value).raw.text;
  9. }
  10. return record.raw.buweitext;
  11. }

  

  1. Ext.define('APP.view.Trainbom.TreeGridList', {
  2. extend : 'Ext.tree.Panel',
  3. xtype : 'Trainbom_TreeGridList',
  4.  
  5. columnLines : true,
  6.  
  7. initComponent : function() {
  8. var me = this;
  9.  
  10. me.plugins = [ me.cellEditingPlugin = Ext.create('Ext.grid.plugin.CellEditing') ];
  11. var combo = Ext.create('APP.lib.DictionaryCombo', {
  12. name: 'buweiid',
  13. code: 'CODE_BUWEI'
  14. });
  15.  
  16. Ext.apply(me, {
  17. store : 'TrainbomStore',
  18. viewConfig: {
  19. plugins: {
  20. ptype: 'treeviewdragdrop',
  21. containerScroll: true
  22. }
  23. },
  24. columns : [ {
  25. xtype : 'treecolumn',
  26. sortable: false,
  27. text : '机车类型',
  28. dataIndex : 'traintype',
  29. width: 150,
  30. editor : {
  31. xtype: 'NormalCombo',
  32. name: 'traintype',
  33. url: 'SysDictionaryController.do?method=selectListTrain',
  34. selectOnFocus : true,
  35. allowOnlyWhitespace : false
  36. }
  37. },{
  38. sortable: false,
  39. text : '12位编码',
  40. dataIndex : 'materialcode',
  41. width: 150,
  42. editor : 'textfield'
  43. },{
  44. sortable: false,
  45. text : '父编码',
  46. dataIndex : 'parentmaterialcode',
  47. width: 150,
  48. editor : 'textfield'
  49. },{
  50. sortable: false,
  51. text : '部件数量',
  52. dataIndex : 'fullcount',
  53. width: 100,
  54. editor : 'numberfield'
  55. },{
  56. sortable: false,
  57. text : '安装数量',
  58. dataIndex : 'installcount',
  59. width: 100,
  60. editor : 'numberfield'
  61. },{
  62. sortable: false,
  63. text : '部位',
  64. dataIndex : 'buweiid',
  65. width: 150,
  66. editor : combo,
  67. renderer: function(value,metadata,record) {
  68. if(combo.store.data.indexOfKey(value) != -1) {
  69. return combo.store.data.get(value).raw.text;
  70. }
  71. return record.raw.buweitext;
  72. }
  73. }]
  74. });
  75.  
  76. me.callParent(arguments);
  77. me.relayEvents(me.getStore(), ['load'], 'store');
  78. me.on('beforeedit', me.handleBeforeEdit, me);
  79. },
  80.  
  81. getSelecedRecordId : function() {
  82. var record = this.getSelectionModel().getSelection()[0];
  83. return record ? record.getId() : '';
  84. },
  85.  
  86. getSelecedRecord : function() {
  87. var record = this.getSelectionModel().getSelection()[0];
  88. return record;
  89. },
  90.  
  91. handleBeforeEdit : function(editingPlugin, e) {
  92. if(e.record.get('id') == 'root') {
  93. Ext.popup.Msg('提示信息', '字典跟节点不允许编辑');
  94. return false;
  95. }
  96. return true;
  97. },
  98.  
  99. refreshView: function() {
  100. //this.getView().refresh(); //本地刷新
  101. var tree = this;
  102. //tree.setLoading(true, tree.body);
  103.  
  104. //服务器端刷新
  105. this.getStore().reload({mask:true});
  106. }
  107. });

Extjs GridPanel 中放入 Combox显示问题的更多相关文章

  1. Javascript - ExtJs - GridPanel组件

    GridPanel组件(Ext.grid.GridPanel)logogram:Ext.grid.Panel | xtype:gridpanel 此类派生自Ext.Panel,创建表格需要两个必须的对 ...

  2. Extjs GridPanel用法详解

    Extjs GridPanel 提供了非常强大数据表格功能,在GridPanel可以展示数据列表,可以对数据列表进行选择.编辑等.在之前的Extjs MVC开发模式详解中,我们已经使用到了GridPa ...

  3. 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 ...

  4. 在li元素中放入img图片时li的高度问题

    在li元素中放入img图片时li的高度会比img图片的高度多出几个像素,解决这个问题只需要将img元素的css设置成vertical-align: middle;就可以解决.

  5. extjs gridpanel 操作行 得到选中行

    extjs gridpanel 操作行 得到选中行的列 在Extjs 3.2.0上适合 var model = grid.getSelectionModel(); model.selectAll(); ...

  6. Eclipse的workspace中放入Ext JS卡死或OOM的解决方案

    Eclipse的workspace中放入Ext JS卡死或OOM的解决方案 原因:是由于Ext JS 的所有的文件js验证 方法一:关于Eclipse解决Ext JS卡死方案: 打开Eclipse的w ...

  7. 基本操作——word中怎样同一页中放入多张图片

    可能很多人在放图片时候,碰见这种情况,习惯性的把图片拖进word,发现不能在一页上很工整的排列.很多人包括我刚开始也纳闷,怎么不能一页中放入几张图片呢,缩放也不想.下面分享一个小技巧给有缘人 以我的w ...

  8. C语言:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,-主函数中放入一个带头节点的链表结构中,h指向链表的头节点。fun函数找出学生的最高分-使用插入排序法对字符串中的字符进行升序排序。-从文件中找到指定学号的学生数据,读入次学生数据,

    //根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> ...

  9. G4Studio+extjs+highcharts 下在ext4j的panel中放入hightCharts图表

    在G4Studio+extjs下.创建一个panel,然后将highCharts图表放入panel中.实现方法例如以下: 首先简单给出的部分代码: Ext.onReady(function() { v ...

随机推荐

  1. 安装Was liberty之步骤

    安装文件下载:http://pan.baidu.com/s/1dDl8PuL 安装三大步骤:拷贝文件,安装VNC和安装WasLiberty 拷贝文件是将需要的文件InstalMgr1.6.2_LNX_ ...

  2. docker下搭建gitlab

    [root@localhost ~]# docker run \ > --name='gitlab' \ > -itd \ > --link gitlab_mysql:mysql \ ...

  3. Citrix服务器虚拟化之二十九 XenApp 6.5发布服务器上的应用程序

    Citrix服务器虚拟化之二十九  XenApp 6.5发布服务器上的应用程序 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1)  服务器桌面:发布场中服务 ...

  4. 【转】Linux下的多线程编程背景知识

    1. 进程和线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(pr ...

  5. 记一发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 ...

  6. Js中/g \s 什么意思

    Js中/g \s 什么意思 js里elm.value.replace(/[\s ]+/g, ''),是什么意思 比如/[\s]是什么意思 elm是表单吧.将elm表单的值中的空白字符替换 replac ...

  7. Python 函数返回多值

    返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...

  8. 深入探讨Linux静态库与动态库的详解(转)

    2.生成动态库并使用 linux下编译时通过 -shared 参数可以生成动态库(.so)文件,如下 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静 ...

  9. 【转发】MVC Log4net

    1.引用log4net库类 2.写配置,我一般是写在web.config <configSections> <section name="log4net" typ ...

  10. 〖Android〗/system/etc/recovery-resource.dat

    源代码中的解释:[platform_build/tools/releasetools/ota_from_target_files] # Recovery is generated as a patch ...