2015-02-16 11 views
5

मेरे पास बैक एंड सेवा है जो मुझे एक ऑब्जेक्ट देती है जिसमें केवल स्ट्रिंग की सरणी होती है। यह वही सेवा मुझे देता है, उदाहरण के लिए है:EXTJS 5 स्टोर में एक बहुत ही सरल स्ट्रिंग सरणी लोड करें

{ 
    "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 Sencha बेला है भाई! बहुत बहुत धन्यवाद !!

उत्तर

12

अपने बेड़े में आपने ArrayStore का उपयोग किया है जो इस उद्देश्य के लिए नहीं है - बल्कि डेटा सेट में दो-आयामी सरणी है जिससे कोई मॉडल मौजूद नहीं है। कृपया ध्यान दें कि मैंने निम्नलिखित उदाहरण में नियमित स्टोर का उपयोग किया है।

चाहे आप स्पष्ट रूप से डेटा के लिए मॉडल बनाते हों या नहीं, एक स्टोर किसी ऑब्जेक्ट में कुंजी (फ़ील्ड नाम) के विरुद्ध मूल्यों की तलाश करेगा। यानी अगर आप क्षेत्रों name और description निर्दिष्ट तो यह रूप में संरचित डेटा की एक सरणी के लिए दिखेगा इस प्रकार है:

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

क्रम सामने के अंत पर इससे बचने के लिए आप एक आवेदन कर सकता है में transformreader कॉन्फ़िगरेशन जो आपको किसी भी अन्य घटकों द्वारा संसाधित होने से पहले कच्चे डेटा ऑब्जेक्ट में हेरफेर करने की अनुमति देता है। उदाहरण के लिए:

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

आकर्षण की तरह काम किया। धन्यवाद! –

संबंधित मुद्दे