Dynamic loading of ComboBox
Я новичёк в ExtJS, использую 4-ю версию. Есть comboBox:
{ name: 'myName', xtype: 'combobox', hiddenName:'popType', store: new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url: 'php/test.php',method:'GET'}), reader: new Ext.data.JsonReader({ root: 'topics', totalProperty: 'count', fields: [{name: 'abbr'},{name: 'name'}] }) }), valueField:'abbr', displayField:'name', triggerAction: 'all', emptyText:'Select', selectOnFocus:true, editable: false } Сервак возвращает ответ вида (проверено в Furebug, ответ действительно приходит): Код:
{count:"26",topics:[{"abbr":"1","name":"option1"}, Врезультате бесконечная загрузка ![]() :help: |
Tim,
попробуйте у reader'a указать type : 'json', successProperty: 'success' а в ответе еще возвращать "success": true |
сделал, всё равно тоже самое
|
Извиняюсь что невнимательно посмотрел ваш код.
Проверил, так работает: { hiddenName: 'popType', xtype: 'combo', store: Ext.create('Ext.data.Store', { autoLoad: true, proxy: { url: 'php/test.php', type: 'ajax', reader: { root: 'topics', type: 'json', totalProperty: 'count', successProperty: 'success' } }, fields: [ 'abbr', 'name'], }), valueField: 'abbr', displayField: 'name', emptyText: 'Select', selectOnFocus: true, editable: false, queryMode: 'local' } autoLoad: true лучше использовать когда у вас либо приложение небольшое, либо данных немного будет в хранилище. Если же например вы хотите загружать store при нажатии триггера, можно переопределить onTriggerClick у комбобокса, например: onTriggerClick: function() { if( this.getStore().getCount() == 0 ) { this.getStore().load({ callback: function() { this.expand(); }.bind(this) }); } else { ( this.isExpanded ) ? this.collapse() : this.expand(); } } |
nekto_O,
Спасибо, заработало наконец то. Я нашёл ещё один, более кривой, точнее совсем кривой способ: загружать массив ajax'ом и создавать combo в функции обратного вызова. Есть ещё одна проблема. ![]() Можно это как то исправить? |
Tim,
Можно конечно. У вас вероятно с сервера приходит отформатированный текст? Самое простое решение: в ответе не нужно html отправлять, вместо этого у комбобокса настроить в listConfig шаблон вывода записей, например: listConfig: { itemTpl: '{name} - <font color="#777777">[{abbr}]</font>' } |
спс
|
Часовой пояс GMT +3, время: 05:42. |