Обновление или перезагрузка магазина ExtJs ComboBox

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

Короче говоря, как я могу изменить значения (сохранение) ComboBox, уже есть.

Надеюсь, кто-то может мне помочь

Спасибо

Ответ 1

Я использовал эту недокументированную функцию API ExtJs для изменения хранилища во время выполнения:

mycombobox.bindStore(newStore);

как указано командой поддержки в http://www.sencha.com/forum/showthread.php?40749-Change-Combobox-store-data-update.

Изменить: если я хочу поместить новые данные при заполнении хранилища, я делаю что-то вроде этого

storeMyStore = new Ext.data.Store({
    ...
    listeners: {
        load: function(this, records, options) {
            cbMyCombo.bindStore( storeMyStore );
        }
    }
});

Ответ 2

Это немного похоже на это

{
  xtype: 'checkbox',
  //configs
  listeners : {
     checked : function (checkbox, checkedBool) {
         var yourCombo = Ext.getCmp(yourComboID);

         //I'm not sure what params you will need to reload the comboBox from your
         // service but hopfully this will give the jist of things. . .

         yourCombo.store.reload(
                  {   
                     params: 
                         {yourParam : checkedBool},
                         {yourRowID : rowID}
                    });
      }
 }

Ответ 3

Здесь я делаю combobox, который обновляется после выбора, сделанного на другом ComboBox. В принципе, конечный пользователь может использовать два списка со списком для выбора основной категории и подкатегории, которая основана на выборе, сделанном в первом поле со списком.

Это хранилище для First comboBox:

Ext.define("StoreSubject", {
extend: "Ext.data.Model",
fields: [
{
    name: 'i_Id'
},
{
    name: 's_Value'
}
]
});

var StoreSubject = Ext.create('Ext.data.JsonStore', {
model: 'StoreSubject',
proxy: {

    type: 'ajax',
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=15',
    reader: {
        type: 'json'
    }
}
});
StoreSubject.load();

Это хранилище для второго comboBox:

Ext.define("StoreLanguageGroup", {
extend: "Ext.data.Model",
fields: [
{
    name: 'i_Id'
},
{
    name: 's_Value'
}
]
});
var StoreLanguageGroup = Ext.create('Ext.data.JsonStore', {
model: 'StoreLanguageGroup',
proxy: {

    type: 'ajax',
    url: '../General/AdministrationDefaultXMLDOM.aspx?qid=16',
    reader: {
        type: 'json'
    }
}
});

Мой код для Comobox выглядит так.

Первый ComboBox:

var cmbSubjectName = Ext.create('Ext.form.field.ComboBox', {
id: 'cmbSubjectName',
fieldLabel: '<b>Subject</b>',
name: 'cmbSubjectName',
valueField: 's_Value',
displayField: 's_Value',
allowBlank: false,
anchor: '80%',
labelWidth: 150,
emptyText: '[--Choose--]',
minChars: 0,
store: StoreSubject,
queryMode: 'local',
typeAhead: true,
listeners: {
    'select': {
        fn: function (combo, value) {
            var strSubjectName = Ext.getCmp('cmbSubjectName').getValue();
            Ext.getCmp('cmbLanguageType').clearValue();
            Ext.getCmp('cmbLanguageType').getStore().load({
                params: {
                    SubjectName: strSubjectName
                }
            });
        }
    }

},
});

Этот код используется для вызова и переопределения хранилища combox (Impotent в противном случае он будет продолжать загружаться)

Ext.override(Ext.LoadMask, {
onHide: function () {
    this.callParent();
}
});

//---------------------------

Второй ComboBox:

var cmbLanguageType = Ext.create('Ext.form.field.ComboBox', {
id: 'cmbLanguageType',
fieldLabel: '<b>Language</b>',
multipleSelect: false,
name: 'cmbLanguageType',
valueField: 's_Value',
displayField: 's_Value',
allowBlank: false,
anchor: '80%',
labelWidth: 150,
emptyText: '[--Choose--]',
minChars: 0,
store: StoreLanguageGroup,
queryMode: 'local',
typeAhead: true,
});

Надеюсь, это поможет вам.. и, пожалуйста, оцените мой ответ

Ответ 4

В прослушивателе событий на флажках, получите ссылку на магазин, который читает ваш ComboBox. Затем вызовите его функции добавления или удаления для обновления данных в хранилище на основании того, что флажок отмечен После того, как обновления завершены, вызовите doLayout() в компоненте ComboBox, он должен повторно отобразить себя на основе текущего состояния хранилища.

Хотя я думаю, что есть способ, чтобы он автоматически обновлял любое время обновления магазина - я еще не использовал это.