ExtJS combobox действует как обычный select

Я пытаюсь использовать ComboBox на FormPanel, он определяется следующим образом:

      xtype:          'combo',
      name:           'Reasons',
      store:          new Ext.data.ArrayStore({
        id:      0,
        fields:  [ 'myId', 'displayText' ],
        data: [ [ 1, 'Reason 1' ], [ 2, 'Second Reason' ], [ 3, 'Something else' ] ]
      }),
      typeAhead:      false,
      mode:           'local',
      valueField:     'myId',
      displayField:   'displayText',
      allowBlank:     false,
      editable:       false,
      forceSelection: true

Я хотел бы действовать как обычный элемент select, когда я редактирую как false, я больше не могу повторно выбирать, когда как true (по умолчанию) мне нужно удалить выделение (путем возврата или удаления), чтобы повторно -Выберите.

Что еще я должен отключить, чтобы понизить значение со списком для выбора или shpuld, я считаю, что вместо этого использовать другой компонент?

Меня беспокоит, действительно ли мне нужен обычный выбор (не совсем обычный - способность хранить и управлять параметрами очень круто) - combox кажется мне элементом следующего уровня, который получил слишком много функций, которые мне нужно отключить, и combox отображается как вход со стрелкой вниз, что запускает все действия....

Мой вопрос: является ли элемент ExtJS тем, что использует тег select HTML, действуя как select, рендеринг как выбрать?

Ответы

Ответ 1

Фокус в том, чтобы использовать triggerAction: 'all' - он выдает всплывающее окно combo для отображения всех элементов, когда вы нажимаете значок стрелки вниз (триггер).

Это, вероятно, самый контр-интуитивный вариант конфигурации ExtJS. И невозможно понять, что это действительно делает, читая документы. И, как вы говорите, чтобы получить простую комбинацию, вы должны указать множество параметров конфигурации, просто чтобы отключить причудливые вещи.

Ребята из ExtJS пообещали исправить это в ExtJS 4, но до тех пор я предлагаю вам создать свой собственный класс ComboBox, который настроил способ, наиболее часто используемый в вашем приложении. Например, у меня есть что-то вроде этого в моем текущем проекте:

/**
 * Simple combo, that just allows to choose from a list of values.
 */
var StaticComboBox = Ext.extend(Ext.form.ComboBox, {
  mode: 'local',
  triggerAction: 'all',
  editable: false,
  valueField: 'value',
  displayField: 'label',
  /**
   * @cfg {[[String]]} data
   * Items in combobox as array of value-label pairs.
   */
  data: [],

  initComponent: function() {
    this.store = new Ext.data.ArrayStore({
      fields: ['value', 'label'],
      data: this.data
    });
    StaticComboBox.superclass.initComponent.call(this);
  }
});

После этого я могу создать простое комбо с несколькими строками:

new StaticComboBox({
  name: 'Reasons',
  data: [
    [1, 'Reason 1'],
    [2, 'Second Reason'],
    [3, 'Something else']
  ]
});