2012-10-12 5 views
2

J'essaie de faire une combobox dépendant des autres combobox avec des valeurs par défaut mais dans les écouteurs de combobox doit charger des données de lui-même. J'ai le problème en utilisant this.store.loadData(todoItems) avec todoItems comme un tableau de quatre positions.ExtJS - combobox dépendante

magasin de This:

var cmb_items = new Ext.data.SimpleStore({ 
     fields : ['itemId', 'item'], 
     data : itemsMenu 
}); 

Je ne sais pas pourquoi. Voici mon code, quelqu'un peut-il me donner un coup de main?

{  
    xtype   : 'combo', 
    store   : cmb_items, 
    hiddenName  : 'id_item', 
    valueField  : 'id_item', 
    mode   : 'local', 
    allowBlank  : false, 
    value   : nombreItem, 
    fieldLabel  : 'items', 
    disabled  : true, 
    name   : 'items', 
    triggerAction : 'all', 
    emptyText  : 'Seleccione un item', 
    editable  : false, 
    id    : "items", 
    anchor   : '90%', 
    displayField : 'item', 
    listeners  : { 
       select: function() { 
        idSistema = Ext.getCmp("sistemas").getValue(); 
        selectedMenu = Ext.getCmp("menus").getValue(); 
        todoItems = getItemsMenu(selectedMenu,idSistema); 
        //alert(todoItems) 
        this.store.loadData(todoItems); 
        idItem  = this.getValue(); 

         alert(idItem);   // RETURN UNDEFINED 

        for(i=0;i<this.store.getCount();i++){ 
         if(todoItems[i][0]==idItem){ 
          nombreItem = todoItems[i][1]; 
          outItem = todoItems[i][2]; 
         } 
        } 
      }          
      } 
}, 

Merci!

Répondre

2

Je ne suis pas très clair avec le code, mais si vous cherchez un combo dépend d'un autre moyen, essayez mon exemple.

var countryStore = new Ext.data.SimpleStore({ 
     fields: ['alpha2code','name'], 
     data: [["BE","Belgium"],["BR","Brazil"],["BG","Bulgaria"]] 
    }); 

    function getState(stCode){ 
     var data=[]; 
     switch(stCode){ 
      case 'BE': 
       data=[["BE","Belgium1"],["BR","Brazil1"],["BG","Bulgaria1"]]; 
       break; 

      case 'BR': 
       data=[["BE","Belgium2"],["BR","Brazil2"],["BG","Bulgaria2"]]; 
       break; 

      case 'BG': 
       data=[["BE","Belgium3"],["BR","Brazil3"],["BG","Bulgaria3"]]; 
       break; 
     } 
     return data; 
    }; 

    var statesStore = new Ext.data.SimpleStore({ 
     fields: ['statecode','name'] 
    }); 

    var stateForm = new Ext.form.ComboBox({ 
     fieldLabel : 'Country', 
     id : 'countryCombo', 
     name : 'country', 
     msgTarget : 'side', 
     triggerAction : 'all', 
     lazyRender : true, 
     store : countryStore, 
     mode: 'local', 
     valueField : 'alpha2code', 
     emptyText : 'Create or Select an partment', 
     displayField : 'name', 
     editable : true, 
     listeners:{ 
      'select': function(combo,value,index){ 
       debugger; 
       var input = combo.getValue();   
       var stateCombo=Ext.getCmp('statesCombo'); 
       //stateCombo.clearValue(); 
       //stateCombo.store.baseParams.countryID=input; 
       stateCombo.store.loadData(getState(input)); 
      } 
     } 
    }); 

    var stateForm1 = new Ext.form.ComboBox({ 
     fieldLabel : 'States', 
     id : 'statesCombo', 
     name : 'states', 
     mode: 'local', 
     msgTarget : 'side', 
     triggerAction : 'all', 
     lazyRender : true, 
     store : statesStore, 
     valueField : 'statecode', 
     emptyText : 'Create or Select an Department', 
     displayField : 'name', 
     editable : true 
    }); 

    var formPanel = new Ext.form.FormPanel({ 
     title: 'World', 
     labelWidth: 120, 
     width: 350, 
     padding: 10, 
     items:[stateForm,stateForm1] 
    }); 

    formPanel.render(document.body); 
+0

merci les hommes! Je pourrais résoudre le problème, ce forum ne me laisserait pas poster la réponse à être un nouvel utilisateur. itemID (champs) doit avoir le même nom que hiddenName-valueFields. I a, hiddenName-valueFields = id_item Désolé, mon anglais est mauvais. répétez, merci! – slorenzo

+0

votre bienvenue. Je viens de trid cet exemple ce matin :) –