extjs एक्स्टजेएस 4 फ्लाई पर ग्रिड स्टोर बदलें




grid extjs4 (4)

क्या यह एक्स्टजेस 4 में ग्रिड की दुकान को बदलने के लिए सकारात्मक है?

उदाहरण के लिए, मेरे पास दो मॉडल हैं:

User = Ext.define('User',{
  extend: 'Ext.data.Model',
  [...],
  hasMany: 'Product'
});

Product = Ext.define('Product',{
  extend: 'Ext.data.Model',
  [...]
});

और दो ग्रिड। पहला ग्रिड स्टोर से जुड़ा हुआ है जो User मॉडल का उपयोग करता है और बैकएंड से नेस्टेड जेसन डेटा लोड करता है, जैसे

{
  users: [{
     id: 1,
     products: [
       {id: 1},
       {id: 2}
     ]
  }, {
     id: 2,
     products: [
       {id: 3},
       {id: 4},
       {id: 5}
     ]
  }]
}

जब मैं पहली ग्रिड में पंक्ति पर क्लिक करता हूं, तो मैं प्राप्त करना चाहता हूं, दूसरी ग्रिड को सर्वर के कनेक्शन के बिना उपयोगकर्ता के उत्पादों को दिखाना चाहिए। मुझे पता है कि user.products(); एक Ext.data.Store ऑब्जेक्ट देता है। तो विचार है कि दूसरी ग्रिड की दुकान को user.products(); बदलना है user.products(); , लेकिन ऐसी कोई विधि नहीं है grid.setStore() :-)

अग्रिम में धन्यवाद


अब्देल ओलाकर के जवाब ने मुझे मदद की जब मुझे उस चीज़ पर डेटा अपडेट करने की आवश्यकता थी जिसने reconfigure नहीं किया था ( Ext.form.FieldSet से प्राप्त कस्टम क्लास)।

लेकिन आपको addRecords लिए addRecords या श्रेणी निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि डिफ़ॉल्ट ने हमें इस मामले में शामिल किया है।

इसका मतलब है कि आप कर सकते हैं:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());

मुझे लगता है कि एक बेहतर समाधान होगा:

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );

यदि आप ग्रिड बनने के बाद एक ग्रिड में स्टोर संलग्न करना चाहते हैं, तो आप bindStore() विधि का उपयोग कर सकते हैं।

var store = user.products();
grid.getView().bindStore(store);

वैकल्पिक रूप से आप लोड (), loadData (), loadRecords () विधियों का उपयोग भी कर सकते हैं और डेटा को अपने स्टोर में कॉपी कर सकते हैं।


आप स्टोर को गलत तरीके से देख रहे हैं। एक स्टोर ग्रिड से हमेशा के लिए जुड़ा हुआ है, इसलिए कोई grid.setStore() । आप ग्रिड के लिए स्टोर नहीं बदलते हैं, इसके बजाय आप उस ग्रिड के लिए स्टोर में डेटा बदलते हैं।

अब, आपकी समस्या का समाधान: आप इस हिस्से के साथ सही हैं कि आपके पास पहले से ही आपके डेटा के साथ स्टोर का उदाहरण है। अर्थात; user.products() । फिर भी, आपको अपने ग्रिड के लिए एक स्टोर बनाना होगा। हालांकि इस स्टोर में कोई डेटा नहीं होगा। अब, जब आपको उत्पाद की जानकारी प्रदर्शित करने की आवश्यकता है, तो आपको डेटा के साथ ग्रिड की दुकान लोड करने की आवश्यकता है। आप उपयोग कर सकते हैं:

  • भार()
  • लोड डेटा()
  • loadRecord ()

अपने स्टोर में डेटा लोड करने के लिए। आपके मामले में, आप निम्न कार्य कर सकते हैं:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});