2011-01-29 2 views
13

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

 
     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 

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

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

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

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

+0

вы можете отправить вызов полной функции к Ext. Combobox – Chandu

+0

Может быть, тупой вопрос, а какая версия extJS вы используете? (Я не могу найти Ext.data.ArrayStore в документации 2.3.0 и FireBug говорит: «Ext.data.ArrayStore не является конструктором», когда я пытаюсь запустить скрипт (файл версии на сервере говорит v .2.2)) – aliceraunsbaek

+0

В настоящее время мы находимся в ExtJS 3.3.x - поэтому вы должны считать свою версию устаревшей. –

ответ

10

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

Это, вероятно, самый контр-интуитивный вариант конфигурации 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); 
    } 
}); 

Having, что я могу создать простой комбо несколько строк:

new StaticComboBox({ 
    name: 'Reasons', 
    data: [ 
    [1, 'Reason 1'], 
    [2, 'Second Reason'], 
    [3, 'Something else'] 
    ] 
}); 
Смежные вопросы