IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ext JS / Sencha Discussion :

rafraichir l'affichage d'un treepanel


Sujet :

Ext JS / Sencha

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 493
    Par défaut rafraichir l'affichage d'un treepanel
    Bonjour,

    j'ai un panel avec dans la partie gauche un treepanel. A chaque item du treepanel, j'ai une case à cocher.
    je voudrais que quand je coche un item qui est un dossier, tous les fils de ce noeuds se cochent aussi.

    j'ai vu une fonction recursive qui est censée faire cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function toggleCheck(node, isCheck) {
    	if (node) {
    		var args = [isCheck];
    		node.cascade(function(){
    					c = args[0];
    					this.ui.toggleCheck(c);
    					this.attributes.checked = c;
    					}, null, args);
    	}
    }
    mais elle plante avec le message:
    pourtant, mon arbre n'a que 3 niveaux...

    ensuite j'ai essayé de récupérer les fils du noeud sélectionné avec la propriété childNodes et de leur mettre le propriété checked à true.
    ça marche, mais je voudrais que l'affichage se mette à jour aussi.
    comment faire?


    Merci,

    Nico

  2. #2
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Bonjour,

    A la fin de ta boucle où tu mets la propriété checked à true sur tous les fils, pourquoi ne pas faire un reload de ton store ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 493
    Par défaut
    j'ai défini la racine de mon arbre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var racine = new Ext.tree.TreeNode({text:'Mon arbre'});
    ensuite je le construit en ajoutant des sous-répertoires avec la fonction appendChild.

    ensuite je déclare mon treePanel :
    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
    tree = Ext.tree.TreePanel({
    				region: "west",
    				border: false,
    				animate: true,
    				autoWidth: true,
    				enableDD: true,
    				lines: true,
    				rootVisible: false,
    				root:racine,
    				listeners: {
    					'checkchange': function(node, checked) { 
     
    									if (node.isLeaf()) {	// si c'est une feuille
    										// blabla bla
    									}
    									else {
    										for (i=0; i<node.childNodes.length; i++) {
    											var c = node.childNodes[i];
    											c.attributes.checked = checked;
    										}
    										this.root.reload();
     
    									}
    					}
    				}
    	});
    mais j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.root.reload is not a function
    qu'est ce que j'ai oublié?
    ou alors je m'y prend mal pour construire mon arbre ?

    Nico

  4. #4
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Ton erreur notifie que tu ne peux pas utiliser la méthode reload sur ton objet root.. Ce n'est pas ta racine que tu souhaite 'reloader' mais ton store.

    Utilises le reload sur ton store et non ta racine.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 493
    Par défaut
    il doit me manquer un composant, parce que je vois pas où j'ai une méthode store :
    mon objet TreePanel est ensuite mis dans un Panel avec d'autres composants, et ce Panel est mis dans la partie center d'un viewport.

    j'ai vu un objet Ext.data.Store, mais je vois pas comment l'utiliser avec mon TreePanel...

    Nico

  6. #6
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Sais-tu ce qu'est un Store ? Ce n'est pas une méthode mais un objet. Grosso merdo ton TreePanel ne peux pas afficher de données si tu ne lui dis pas quelles sont ces données à afficher. Ton Store est en fait un JSON qui va alimenter ton arbre (Sais-tu ce qu'est un JSON ?). La première chose à faire c'est de générer un JSON correct

    Je t'invites à regarder les exemples officiels: Exemples ExtJs
    Mais aussi de faire un tour sur l'API: API ExtJs 3.3.1


    Un exemple perso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    storeLoader = new Ext.tree.TreeLoader({
            dataUrl: '<%=request.getContextPath()%>/servlet/com.sharedvalue.servlet.inet.http.moveTo', //URL de ma servlet qui génère mon JSON
            baseParams: {MNEMO: 'FPOSTE_REPERE', SP: '<%=userSession.getCurrentSpace()%>', ROLE: '<%=userSession.getCurrentRole()%>', ACTION: 'GETJSON', ID: '<%=sId%>', idPrFather: '<%=idPrFather%>', idPrType: '<%=idPrType%>'},
            uiProviders:{
                'col': Ext.ux.tree.ColumnNodeUI
            }
        });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var root = new Ext.tree.AsyncTreeNode({
            id: '0',
            text: 'source', //texte du noeud
            allowDrag: false,
            allowDrop: false
        });
    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
    posteRepereCompetenceTree = new Ext.ux.tree.TreeGrid({
            title: 'monTitle',
            id: 'monId',
            width: monWidth,
            height: monHeight,
            renderTo: 'monRender',
            enableDD: true,
            rootVisible: false,
            animate: true,
            enableSort: false,        
            autoScroll: true,
            loader: storeLoader, //Il te manque ça !
            root: root,
            columns: [...
            ],
           ...
        });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. OnPaint: rafraichir l'affichage
    Par Biosox dans le forum wxWidgets
    Réponses: 2
    Dernier message: 19/12/2006, 14h43
  2. rafraichir l'affichage d'un sous formulaire
    Par tibiurs dans le forum Access
    Réponses: 4
    Dernier message: 31/08/2006, 16h20
  3. [evc4] Rafraichir l'affichage
    Par Caroooo dans le forum MFC
    Réponses: 15
    Dernier message: 23/06/2006, 13h58
  4. débutant : rafraichir l'affichage c++builder
    Par matika dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/03/2006, 12h20
  5. [JFrame] Rafraichir l'affichage d'1 JFrame
    Par tomburn dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/04/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo