2015-02-16 1 views
5

У меня есть служба заднего конца, которая дает мне объект, который содержит только массив строк. Это, например, что услуга дает мне:EXTJS 5 Загрузите массив VERY SIMPLE string в хранилище

{ 
    "DepartementsResult": [ 
    "AME-CM", 
    "BMAU", 
    "BMKR", 
    "BNVS" 
    ] 
} 

Так, чтобы получить эти данные, я хочу, чтобы создать хороший и простой магазин, но первая проблема появляется: то, что должно быть поле ???

var store = Ext.create('Ext.data.Store', { 
    fields: ['data'], // What should be the fields here, I have none ^^" 
    pageSize: 0, 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: 'data.json', // this file contains the data described above 
     reader: { 
      type: 'json', 
      rootProperty: 'DepartementsResult' 
     } 
    } 
}); 

А потом, когда я хочу, чтобы создать комбо, используя этот магазин я не знаю, что я должен написать также:

var combo = Ext.create('Ext.form.field.ComboBox', { 
    store: store, 
    displayField: 'data', // what field should be displayed ^^" ? 
    valueField: 'data', // same here I don't really know what to write 
    fieldLabel: 'Departements', 
    renderTo: Ext.getBody() 
}); 

Вот ссылка https://fiddle.sencha.com/#fiddle/iau к сенчу скрипке с кодом, описанным рев! Большое спасибо !!

ответ

12

В вашей скрипке вы использовали ArrayStore, который не предназначен для этой цели, а скорее представляет собой двумерный массив в наборе данных, в котором модель не существует. Обратите внимание, что я использовал обычный магазин в следующем примере.

Независимо от того, явно ли вы создаете модель для данных или нет, магазин будет искать значения по отношению к ключу (имени поля) в объекте. т.е., если вы указали поля name и description, то он будет искать массив данных структурирована следующим образом:

{ 
    name: 'Record Name', 
    description: '...' 
} 

Для того, чтобы работать вокруг этого на переднем конце вы могли бы применить transform до конфигурации reader, которая позволяет вам манипулировать необработанным объектом данных до его обработки любыми другими компонентами. Например:

var store = Ext.create('Ext.data.Store', { 
    fields: ['name'], 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: 'data.json', 
     reader: { 
      type: 'json', 
      rootProperty: 'GetDepartementsResult', 
      transform: function(data){ 
       var key = this.getRootProperty(); 
       data[key] = data[key].map(function(val){ 
        return { name: val }; 
       }); 
       return data; 
      } 
     } 
    } 
}); 

Таким образом, у вас есть четкое поле, называемое name, который можно использовать для настройки как displayField и valueField на вашем поле со списком.

» fiddle

+0

Отличный ответ! Большое спасибо Digigizmo, ваши объяснения очень ясны, и ваш пример работает более чем прекрасно :)! Большое спасибо !! – JkSuf

+0

Работали как очарование. Благодаря! –

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

  • Нет связанных вопросов^_^