更改ext.form.combobox中的显示值

时间:2011-09-01 17:43:40

标签: extjs

Ext.form.Combobox中的哪个属性是当前在ComboBox中显示的字段?

用户从JsonStore中选择一些内容并将值传递给组合框后,displayField将显示在ComboBox的搜索字段中。我需要创建一个ComboBox,其中用户从JsonStore中选择某个对象,但是完全不相关的东西是ComboBox搜索字段中显示的内容(这不能通过更改JsonStore记录中的任何属性来完成,因为字符串是通过搜索并且最终传递的值不能不同)。我只需要覆盖组合框中显示的内容。

2 个答案:

答案 0 :(得分:2)

您可能想要做的是

  • 让displayField成为“完全不相关的东西是ComboBox搜索字段中显示的内容”
  • 然后,覆盖doQuery以过滤aThirdField(或其他)
  • 上的商店
  • 如果您将其保留在此处,则下拉列表将在您键入时显示displayFields。从下拉列表中选择一个项目时,displayField将显示在搜索框中(触发字段)。
  • 除了您想要更改下拉列表中显示的内容外,这一切都很好。
  • 要解决此问题,请配置组合框的tpl属性以显示第三个字段或第四个字段或您想要在下拉列表中显示的任何内容。

换句话说,解决方案将沿着 -

  • 始终将displayField配置为您希望在触发器字段选项后选择的字段
  • 如果您不想在displayField上进行过滤,请覆盖doQuery
  • 如果您不想在下拉列表中显示除displayField以外的任何内容,请配置tpl

参考 - Ext.form.ComboBox

答案 1 :(得分:0)

您可以使显示的文本与值不同。

    Ext.define('BasicStoreModel', {
        extend: 'Ext.data.Model',
        fields : ['valueField', 'displayField']
    });

    var myStore = new Ext.data.SimpleStore({
        model: 'BasicStoreModel',
        data: [['value1','display1'], ['value2', 'display2']]
    });

items: [...
{
   fieldLabel: 'Label',
   xtype: 'combo',
   name: 'nameOfSelect',
   editable: false,
   store : myStore,
   displayField: 'displayField',
   valueField: 'valueField',
   queryMode: 'local',
   triggerAction: 'all',
}

前两位似乎有点矫枉过正,但我​​已经创建了许多使用BasicStoreModel的SimpleStore实例。你应该能够扩展JsonStore。