2010-11-18 3 views
13

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

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

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

Благодаря

+0

ли какой-то ответ решил проблему?Примите наилучший ответ, нажав на галочку, пожалуйста. – Roberto

ответ

0

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

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

+0

Считаете ли вы возможным обновить выпадающий список внутри одного из своих событий? Например, я хочу щелкнуть со списком (стрелка вниз), а затем перед его отображением функция получает значения на основе выбранных флажков. – user512514

+0

На самом деле, у меня есть gridPanel с флажками. Я получаю некоторые значения из записей, полученных getSelections. Я хотел бы найти способ сделать этот процесс один раз вместо того, чтобы делать это каждый раз, когда я выбираю строку (или установите флажок). Вот почему я получил идею сделать это, нажав на ComboBox. – user512514

+0

Это возможно сделать внутри внутренних событий combobox, расширить объект ComboBox и добавить собственные js, прежде чем вызывать обработчик событий родителя. Что касается gridPanel, это немного сложно концептуализировать без кода. –

6

Это идет немного что-то вроде этого

{ 
    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} 
        }); 
     } 
} 
14

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

mycombobox.bindStore(newStore); 

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

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

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

Не очень «недокументированный» на самом деле, http://docs.sencha.com/extjs/4.2.5/#!/api/Ext.form.field.ComboBox-method-bindStore но сделал трюк для меня, благодаря! –

+0

О, ну, это было недокументировано в 2011 году :) – Roberto

2

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

Это магазин для первой 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 магазин (бессильной в противном случае он будет держать на загрузку)

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, 
}); 

Надеется, что это помогает .. и Оцените мой ответ

+0

Добро пожаловать в [so]! Пожалуйста, примите [тур]. – Unihedron

Смежные вопросы