2015-02-16 26 views
5

bir ÇOK BASİT dize dizisi bana sadece dize dizisi içeren bir nesne sağlar bir arka uç hizmeti var. Bu hizmet bana verir örneğin geçerli:extjs 5 Yük deposunda

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

Bu yüzden güzel ve basit bir mağaza oluşturmak istiyorum bu veriler, ancak ilk sorun görünür olsun: hangi alanda olmalıdır ???

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

Ve bu mağazayı kullanarak bir combo oluşturmak istediğinizde o zaman ben de yazmalıyım bilmiyorum: Burada

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

tarif kodla sencha keman link https://fiddle.sencha.com/#fiddle/iau olduğunu feryat! Çok teşekkürler !! yerine iki boyutlu bir dizi veri setinde bir model var sayede - senin keman olarak

cevap

12

bu amaçla tasarlanmamıştır bir ArrayStore kullandım. Lütfen aşağıdaki örnekte düzenli bir mağaza kullandığımı unutmayın.

olursa olsun açıkça veri veya olmayan bir model oluşturmak olsun, bir mağaza bir nesne anahtar (alan adı) karşı değerler arayacaktır. yani Eğer alanları name ve description belirtilirse o zaman olarak yapılandırılmış verilerin bir dizi arar şu: Bir geçerli olabilir ön uç bu geçici bir çözüm için

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

herhangi bir başka bileşenler tarafından işlenmeden önce ham veri nesnesini işlemek için izin reader konfigürasyonuna transform. Örneğin:

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

Eğer yapılandırmak için kullanabileceğiniz name denilen açık bir alan vardır Bu şekilde hem displayField ve açılan kutu üzerinde valueField.

» fiddle

+0

Mükemmel yanıt! Çok Digigizmo'ya teşekkürler, açıklamalarınız çok açık ve örneğiniz daha iyi çalışıyor :) Çok teşekkürler !! – JkSuf

+0

Charm gibi çalıştım. Teşekkürler! –