2009-04-30 7 views
1

J'ai un problème (peut-être que ce sera ma faute d'utiliser incorrectement ExtJs, j'espère que je le fais) en utilisant ExtJs pour faire un combo en cascade dans un formulaire. Telle est la situation:ExtJs en cascade-Combos Problème

  1. J'ai 3 combos, zones, régions, villes
  2. Lorsque je clique sur l'un d'eux dans l'ordre, celui lié sera mis à jour faire une demande ajax en utilisant JSON comme format de données (même si je pense qu'il est pas utile, la séquence est la séquence normale des zones -> régions -> Villes)
  3. même si ce n'est pas si important, je suis sur un ASP.NET MVC back-end

Le problème se pose lorsque, comme première opération, je clique d'abord sur un descendant, puis sur le parent, par exemple, si je il suffit d'ouvrir avant les régions, puis en ouvrant des zones et en en sélectionnant une, j'espère que cela remplira bien les régions ... mais rien ne se passe. Dans ce cas aussi, la requête ajax est faite correctement et les données Json résultantes sont renvoyées comme si elles étaient retournées "si je respecte l'ordre des clics (Zones -> Régions)". Permettez-moi de dire que si, lorsque j'entre dans la page la première fois et que je fais un ordre de clic normal, tout va bien, mais quand je change l'ordre des clics, comme je l'ai déjà dit, ça ne marchera jamais plus.

Le code que nous employons pour ce qui est:

var RegionsStore = new Ext.data.JsonStore({ 
           url:'/mypath/blabla', 
           fields:['Value','Text'] 
        }); 
Ext.onReady(function() { 
    Ext.getCmp('ext-Area').on('select', function(sender, item) { 
     var target = Ext.getCmp('ext-Regions'); 
     target.setDisabled(true); 
     target.setValue(''); 
     target.store.removeAll(); 
     target.displayField = 'Text'; 
     target.valueField = 'Value'; 
     target.store = RegionsStore; 
     target.store.reload({ 
       params: { 
        data: 'regions', 
        discriminator: 'area', 
        value: sender.getValue() 
       } 
     }); 
     target.setDisabled(false); 
    }); 
}); 

Merci d'avance pour vos suggestions!

Répondre

0

Appelez le combo-2.store.clearFilter(); dans le premier gestionnaire de sélection de combo pour effacer le deuxième filtre interne combo avant de le mettre à jour.

+0

Votre solution ne fonctionne toujours pas ... – Hoghweed

+0

Avez-vous le mettre après cela? target.store.reload ({ params: { données: 'régions', discriminateur: 'Zone', valeur: sender.getValue() } target.store.clearFilter(); – Thevs

+0

Et vous avez probablement Vous devez également définir la valeur de combo cible sur '' (chaîne vide). – Thevs