Ext.form.ComboBox:使用displayField的模板

时间:2010-07-30 07:46:14

标签: templates combobox extjs datastore

有没有办法将模板应用于ComboBox的选定值?我正在使用模板显示ComboBox的下拉值,但只要选择一个,就会显示数据存储区中的普通值。

{
  id:               'requestStatusCombo',
  hiddenName:       'requestStatus',
  tpl:             '<tpl for="."><div class="x-combo-list-item">{statusCode:requestStatus}</div></tpl>',
  fieldLabel:       'Status',
  xtype:             'combo',
  mode:           'local',
  triggerAction:     'all',
  store:             new Ext.data.ArrayStore({
      fields:       ['statusCode'],
      data:       [['unassigned'],['assigned'],['closed']]
  }),
  valueField:       'statusCode',
  displayField: 'statusCode'
}

我想使用我的格式函数requestStatusstatusCodes转换为语言环境特定状态名称,这适用于下拉列表,但只要我选择了某些内容,{{{ 1}}显示。

那么可以将模板分配给displayField,或者可以在数据存储上进行一些简单的批量修改吗?通过阅读器处理输入可能吗?还有另一个statusCode关键字可以实现这一目标吗?

我正在寻找一些利用Ext库的简单方法。如果唯一的解决方案是预处理数据,我自己就能做到这一点。

2 个答案:

答案 0 :(得分:3)

我找到了解决方案!

我更改了我的数据存储区,并添加了一个阅读器,使用转换函数预处理状态:

{
  id:               'requestStatusCombo',
  hiddenName:       'requestStatus',
  fieldLabel:       'Status',
  xtype:             'combo',
  mode:           'local',
  triggerAction:     'all',
  store:             new Ext.data.Store({
      data:       [['unassigned'],['assigned'],['closed']],
      reader:       new Ext.data.ArrayReader({},[
          {name: 'statusCode',   mapping: 0},
          {name: 'displayname', mapping: 0, convert: function(statusCode) {
              return Ext.util.Format.requestStatus(statusCode);
          }}
      ])
  }),
  valueField:       'statusCode',
  displayField:   'displayname'
}

答案 1 :(得分:2)

Examinig生成的DOM您将注意到,虽然列表元素是DIV,但字段本身是html INPUT元素。你不能在INPUT元素中包含HTML ...所以不...这里没有xtemplate。

这并不意味着无法通过扩展Ext.form.ComboBox(或者可能是Ext.Component)来完成