2011-03-22 18 views
6

के डेटास्टोर को गतिशील रूप से बदलना मेरे पास एक कॉम्बो बॉक्स है जो किसी अन्य combobox के चयन के आधार पर अपने मानों को पॉप्युलेट करता है। मैंने उदाहरण देखे हैं जहां चयन के आधार पर अंतर्निहित स्टोर में पैराम बदल दिए गए हैं, लेकिन मैं जो हासिल करना चाहता हूं वह पहले कॉम्बो के चयन के आधार पर स्टोर को दूसरे कॉम्बो के रूप में बदलना है। यह मेरा कोड है, लेकिन यह काम नहीं करता है। क्या कोई मदद कर सकता है?एक कॉम्बोबॉक्स

{ 
          xtype: 'combo', 
          id: 'leads_filter_by', 
          width: 100, 
          mode: 'local', 
          store: ['Status','Source'], 
          //typeAhead: true, 
          triggerAction: 'all', 
          selectOnFocus:true, 
          typeAhead: false, 
          editable: false, 
          value:'Status', 
          listeners:{ 
           'select': function(combo,value,index){ 
            var filter_to_select = Ext.getCmp('cmbLeadsFilter'); 
            var container = filter_to_select.container; 
            if (index == 0){ 
              filter_to_select.store=leadStatusStore; 
             filter_to_select.displayField='leadStatusName'; 
             filter_to_select.valueField='leadStatusId'; 
             } else if(index==1) { 
              filter_to_select.store=leadSourceStore; 
             filter_to_select.displayField='leadSourceName'; 
             filter_to_select.valueField='leadSourceId'; 
             } 
            } 
           } 
    },  
{ 
          xtype: 'combo', 
          id: 'cmbLeadsFilter', 
          width:100, 
          store: leadStatusStore, 
          displayField: 'leadStatusName', 
          valueField: 'leadStatusId', 
          mode: 'local', 
          triggerAction: 'all', 
          selectOnFocus:true, 
          typeAhead: false, 
          editable: false 
         },  

उत्तर

3

यह काम करने के लिए डिज़ाइन नहीं किया गया है !! जब आप कॉन्फ़िगर में स्टोर सेट करते हैं, तो आप कॉम्बो में स्टोर को बाध्य कर रहे हैं। आप स्टोर को नहीं बदलते हैं, इसके बजाए आपको आवश्यकतानुसार डेटा बदलना होगा।

ऐसा करने का सही तरीका स्टोर से सर्वर से सही डेटा के साथ लोड करना होगा। डेटा लाने के लिए, आप पैराम पास कर सकते हैं जो सर्वर साइड कोड को लोड करने के लिए आवश्यक विकल्पों का सेट प्राप्त करने में मदद करेंगे।

1

आप स्टोर का उपयोग नहीं करना चाहते हैं ... बस शब्दों में कहें, स्टोर को नियंत्रण के लिए बाध्य किया गया है क्योंकि यह तत्काल है। हालांकि, आप किसी भी अतिरिक्त POST अनुरोधों में उपयोग किए गए यूआरएल, और पैरा/बेसपैम को बदल सकते हैं।

इन पैराम का उपयोग करके, आप अपनी कॉम्बो बॉक्स की दुकान में डेटा के विभिन्न सेट वापस करने के लिए अपनी सेवा को कोड कर सकते हैं। पहले "leads_filter_by" कॉम्बो के लिए नीचे दिए गए "श्रोता" टुकड़ा

उपयोग:

1
प्रस्तावित समस्या समाधान नीचे कोशिश कर सकते हैं के लिए

। यह गतिशील स्टोर बाध्यकारी/दूसरे combobox के लिए बदल जाएगा।

listeners:{ 
      'select': function(combo,value,index){ 
        var filter_to_select = Ext.getCmp('cmbLeadsFilter'); 
        var container = filter_to_select.container; 
        if (index == 0){ 
         //filter_to_select.store=leadStatusStore; 
         filter_to_select.bindStore(leadStatusStore); 
         filter_to_select.displayField='leadStatusName'; 
         filter_to_select.valueField='leadStatusId'; 
        } else if(index==1) { 
         //filter_to_select.store=leadSourceStore; 
         filter_to_select.bindStore(leadSourceStore); 
         filter_to_select.displayField='leadSourceName'; 
         filter_to_select.valueField='leadSourceId'; 
         } 
       } 
     } 

आशा है कि यह समाधान आपकी मदद करेगा।

धन्यवाद & सम्मान।

0

मुझे एक ही समस्या थी। दूसरा combobox स्टोर लोड करेगा और मान प्रदर्शित करेगा, लेकिन जब मैं एक मूल्य का चयन करेंगे, यह वास्तव में चयन नहीं करेगा। मैं सूची आइटम पर क्लिक करूंगा और combobox मान खाली रहेगा।

मेरे शोध यह भी सुझाव दिया है कि यह आरंभीकरण के बाद एक combobox पर दुकान और क्षेत्र मैपिंग को बदलने के लिए अनुशंसित नहीं था इसलिए यहाँ मेरी समाधान था:

  1. ध्यान में रखते हुए एक कंटेनर है कि करने के लिए बता गया पकड़ होगा बनाएं मुझे बाद में इसे जोड़ने के लिए एक संदर्भ बिंदु दें
  2. कम्बोबॉक्स के प्रारंभिक कॉन्फ़िगरेशन की एक प्रति प्राप्त करें (इससे मुझे मेरी कॉन्फ़िगरेशन को दृढ़ता से दृश्य में सेट करने की अनुमति मिलती है और इसे मेरे प्रतिस्थापन फ़ंक्शन में हार्ड कोड नहीं देता है ...मामले में मैं अन्य config गुण बाद में)
  3. कि config करने के लिए नए स्टोर, valueField और displayField लागू करें जोड़ने के लिए
  4. वर्ष बता गया
  5. नष्ट संशोधित config
  6. चरण 1 से मेरे संदर्भ का उपयोग के साथ नए बता गया बनाएं चाहते हैं, जोड़ने नई बता गया

दृश्य:

items: [{ 
    xtype: 'combobox', 
    name: 'type', 
    allowBlank: false, 
    listeners: [{change: 'onTypeCombo'}], 
    reference: 'typeCombo' 
}, { // see controller onTypeCombo for reason this container is necessary. 
    xtype: 'container', 
    reference: 'valueComboContainer', 
    items: [{ 
     xtype: 'combobox', 
     name: 'value', 
     allowBlank: false, 
     forceSelection: true, 
     reference: 'valueCombo' 
    }] 
}, { 
    xtype: 'button', 
    text: 'X', 
    tooltip: 'Remove this filter', 
    handler: 'onDeleteButton' 
}] 

नियंत्रक:

replaceValueComboBox: function() { 
    var me = this; 

    var typeComboSelection = me.lookupReference('typeCombo').selection; 
    var valueStore = Ext.getStore(typeComboSelection.get('valueStore')); 
    var config = me.lookupReference('valueCombo').getInitialConfig(); 

    /* These are things that get added along the way that we may also want to purge, but no problems now: 
    delete config.$initParent; 
    delete config.childEls; 
    delete config.publishes; 
    delete config.triggers; 
    delete config.twoWayBindable; 
    */ 
    config.store = valueStore; 
    config.valueField = typeComboSelection.get('valueField'); 
    config.displayField = typeComboSelection.get('displayField'); 
    me.lookupReference('valueCombo').destroy(); 
    var vc = Ext.create('Ext.form.field.ComboBox', config); 

    me.lookupReference('valueComboContainer').add(vc); 
}, 
संबंधित मुद्दे