Bonjour,
J'ai vu un tuto sur la réalisation d'un combo cascading Exjs3 que j'ai voulu passé sur Extjs4 mais Extjs se comporte autrement que la version 3. C'est un petit exemple des voitures (make) et de leur model (model)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var makesStore = new Ext.data.JsonStore({
 
    fields: ['id', 'name'],
    proxy:{
        type:'ajax', 
        extraParams:{cmd:'makes'},
        actionMethods:{
            read:'GET'
        },
        url: './cars-makes-models.php',
        reader:{
              type:'json',
              root: 'makes'
 
           }
    }
});
//makestore.load({params:{start:0, limit:20}});
var modelsStore = new Ext.data.JsonStore({
 
    fields: ['id', 'name'],
    proxy:{
        type:'ajax',
        extraParams: { cmd:'models'},
        actionMethods:{
            read:'GET'
        },
        url: 'cars-makes-models.php',
        reader:{
              type:'json',
              root: 'models',
 
           }
    }
});
 
var makesCombo = {
    xtype: 'combo',
    store: makesStore,
    id:'idmakesCombo',
    displayField: 'name',
    valueField: 'id',
    typeAhead: true,
    editable:false,
    mode: 'remote',
    forceSelection: true,
    triggerAction: 'all',
    fieldLabel: 'Make',
    emptyText: 'Select a make...',
    selectOnFocus: true,
    anchor:'95%',
    listeners: {
        'select': function(cmb, rec, idx) {
            modelsCbx = Ext.getCmp('models-combo');
            modelsCbx.clearValue();
            modelsCbx.store.load({
                params: { 'makeId': this.getValue() }
            });
            modelsCbx.enable();                    
        }
    }
}
 
var modelsCombo = {
    xtype: 'combo',
    id:'models-combo',
    store: modelsStore,
    displayField: 'name',
    valueField: 'id',
    typeAhead: true,
    editable: false,
    mode: 'local',
    forceSelection: true,
    triggerAction: 'all',
    fieldLabel: 'Model',
    emptyText: 'Select a model...',
    selectOnFocus: true,
    disabled: true,
    anchor: '95%'
}
le comportement qu'il donne c'est que lorsque le deuxieme combo est activé et que je clique dessus au lieu d'avoir la liste des models, j'ai une erreur json et dans la console du firebug, j'ai remarqué qu'il redemande mon parametre makeId passé en parametre dans le listener, bref mon fichier php est appelé deux fois, ce qui est bizarre puisse que le store de mon deuxième combo box est déjà load

le fichier php est sous cette forme

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php 
ini_set("display_errors", true);
ini_set("html_errors", true);
 
$command = $_GET["cmd"];
$out = "";
 
switch ($command) {
 
  case "makes":
    $out = GetMakes();
    break;
 
case "models":
	$makeId = $_GET["makeId"];
    $out = GetModels($makeId);
    break;		
}
 
echo utf8_encode($out);
 
function GetMakes() {   
 
    $makes = "{'makes':[";
    $makes .= "{'id':'1','name':'Acura'},"; 
    $makes .= "{'id':'2','name':'Aston Martin'},";
    $makes .= "{'id':'3','name':'Audi'},";
    $makes .= "{'id':'4','name':'BMW'},";
    $makes .= "{'id':'5','name':'Buick'},";
    $makes .= "{'id':'6','name':'Cadillac'},";
    $makes .= "{'id':'7','name':'Volkswagen'},";
    $makes .= "{'id':'8','name':'Volvo'}";	
	$makes .= "]}";
 
	return $makes;
} 
 
function GetModels($makeId) {   
 
 
	$models = "{'models':[";
 
	switch ($makeId) {
 
	  case 1:	// Acura
		$models .= "{'id':'1','name':'MDX'},"; 
		$models .= "{'id':'2','name':'RDX'},";
		$models .= "{'id':'3','name':'RL'},";
		$models .= "{'id':'4','name':'TL'},";
		$models .= "{'id':'5','name':'TSX'}";
		break;
 
		case 2:	// Aston Martin
			$models .= "{'id':'1','name':'DB9'},"; 
			$models .= "{'id':'2','name':'DBS'},";
			break;		
 
 
		default:	// Why do't you code the rest of the models? :)
			$models .= "{'id':'0','name':'No data found'}"; 
	}
 
	$models .= "]}";
 
	return $models;
} 
?>