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, время: 18:39. |