Показать сообщение отдельно
  #4 (permalink)  
Старый 20.08.2012, 14:51
Аспирант
Отправить личное сообщение для goldserg Посмотреть профиль Найти все сообщения от goldserg
 
Регистрация: 08.02.2010
Сообщений: 37

В продолжение темы, задача немного другая.
Есть данные статичные которые должны быть добавлены в начало Combo, есть данные из базы которые добавляются через JsonReader.
Как мне объединить оба формата данных в одном Combo.
Уже пытался и add делать для store, и load и loadData... В разных случаях получаются разные ошибки в ядре ext. Что я делаю не так? (Ext 3.4 - выше пока использовать не могу.)
var store = new Ext.data.Store({
      url: 'AJAX_URL',
      fields: ['title', 'value'] ,
      reader: new Ext.data.JsonReader({
         root: 'root',
      }, [
         { name: 'title', mapping: 'title' },
         { name: 'value', mapping: 'value' }
     ])
});
// где _p = new Ext.form.FormPanel
_p.add({
   xtype: 'combo',
   fieldLabel: title,
   id: id,
   name: name,
   store: store,
   /* второй вариант
   store: new Ext.data.ArrayStore({
        fields: ['value'],
        data: [{title: 'title', value: 'value'}, {title: 'title2', value: 'value2'}]
   })*/,
   valueField: 'value',
   typeAhead: false,
   displayField:'title',
   //mode: 'local',
   forceSelection: false,
   triggerAction: 'all',
   editable: false
});

store.loadData([{title: 'title', value: 'value'}, {title: 'title2', value: 'value2'}]);

_p.doLayout();


По раздельности работает, вместе нет.
Пишет ошибку где-то в недрах ext (Cannot read property 'length' of undefined )

UPD
Добавил data в правильном формате
fields: ['title', 'value'] ,
 data: {"root":[{"title":"title","value":"value"},{"title":"title","value":"value"},{"title":"title","value":"value"}]},
 reader: new Ext.data.JsonReader({


Стало чуть чуть лучше, теперь надо понять как сделать так чтобы Json ответ не затирал все содержимое Combo, а добавлял в конец.

UPD2

Нашел решение
Надо для store прописать
listeners: {
    load: function() {
      var rec = new Ext.data.Record.create([{name: 'title', type: 'string'},{name: 'value', type: 'string'}]);
      this.insert(0, new rec({title: 'title2', value: 'value2'}));
    }
  }

Последний раз редактировалось goldserg, 20.08.2012 в 16:45.
Ответить с цитированием