【问题标题】:Change display value in ext.form.combobox更改 ext.form.combobox 中的显示值
【发布时间】:2011-11-08 14:39:04
【问题描述】:

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

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

【问题讨论】:

    标签: extjs


    【解决方案1】:

    你可能想做的是

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

    换句话说,解决方案将遵循 -

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

    参考 - Ext.form.ComboBox

    【讨论】:

    • 谢谢 - 太好了!实际上我最终做了类似的事情,但是 SO 不会让我在另外 6 个小时内回答我自己的帖子:/ 我创建了一个 beforeSelect 函数,将 displayField 分配给触发字段显示值,并创建了一个 beforeQuery 函数,将 displayField 分配给 jsonstore搜索值。
    【解决方案2】:

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

        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。

    【讨论】:

    • 我实际上需要使用每条记录的 3 个属性来完成这项工作......“valueField”是所选记录的值(在我的情况下是数字代码),一个“displayField”匹配用户输入并用于搜索 searchStore 的内容,以及第三个字段,即在选择项目后显示在下拉列表和搜索框中的内容。我可以使用 tpl 使第三个字段出现在下拉列表中,但是有没有办法在选择项目后也将其显示在搜索字段中?
    • 目前,当用户点击下拉列表中的选项时显示的内容,搜索字段中显示的是“displayField”属性。如果可能,我希望显示第三个属性。或者,实际上只有一个下拉选项,其中在选择选项后无法向用户显示 displayField,因此可以简单地覆盖在文本框中看到的内容(不更改所选值)。
    • 有没有办法在搜索字段本身为记录设置“tpl”,就像在下拉列表中设置记录一样?
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多