Bonjour,
De retour pour terminer mon premier développement Dojo + Ajax ( après une longue escapade sur un autre projet ). Les pages s'enchaînent de façon assez fluide, les données sont enregistrées dans la base, affichées dans les pages, celà est moins laborieux qu'au début sous réserve de procéder de manière basique.
Dans le cas présent, j'ai plusieurs pages avec une structure assez similaire qui doivent afficher des listes d'éléménts dans un Datagrid, après avoir factorisé tout çà, j'obtiens les éléments suivants :
- un datagrid
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 datagrid = new dojox.grid.DataGrid({ query: {id: '*'}, clientSort: true, autoWidth: true, rowSelector: '20px', structure: layoutListe });- un layout de liste spécifique à chaque page
- un jsonStoreGrid
pour alimenter le grid ( tous les champs du store ne sont pas obligatoirement affichés : affichage sous la dépendance de la structure du Layout ).
Et au chargement de la page, j'ai une requête Ajax sur le serveur qui permet de récupérer les données du jsonStoreGrid :
Celà pour l'aspect statique qui fonctionne sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 load: function(data) { .... jsonStoreGrid = new dojo.data.ItemFileReadStore({url: data.url, clearOnClose: true}); jsonStoreGrid.fetch(); datagrid.setStore(jsonStoreGrid); ......
Pour permettre à l'utilisateur d'effectuer des tris sur l'affichage des lignes du Datagrid, j'introduis une ComboBox afin de choisir le type de sélection ( cette ComboBox est alimentée par un store (jsonSelection) qui reprend toutes les valeurs possibles d'un champ du jsonStoreGrid ).
Celà aussi fonctionne sur le principe, mais 2 questions :
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 function boiteselection(str){ // str : code de la page dans laquelle est instanciée la Combobox boxselection = new dijit.form.ComboBox({ onChange: groupselection, value: "", store: jsonSelection, searchAttr: "nom"}, document.createElement('div')); boxselection.codepage = str; function groupselection(){ var vquery; switch (boxselection.codepage) { case 'codepage1': vquery = {groupe:boxselection.attr('value')}; // groupe : nom du champ du jsonStoreGrid sur lequel on veut effectuer la sélection break; case 'codepage2': vquery = {element:boxselection.attr('value')}; // element : nom du champ du jsonStoreGrid sur lequel on veut effectuer la sélection break; ...... } jsonListe.fetch( {query:vquery, onComplete: function(items, resultat){ jsonListe.close(); jsonListe = new dojo.data.ItemFileReadStore({data: {items:items}, clearOnClose: true}); datagrid.setStore(jsonListe); } }); }
- N'y a t'il pas plus simple?
- C'est du type 'one shot' :
Après la première requête, j'ai perdu le store d'origine, si bien que celà m'oblige à faire une requête sur le serveur pour récupérer le store initial?
Partager