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 :

[Treeloader] Récursivité et personnalisation


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Treeloader] Récursivité et personnalisation
    Bonjour,

    j'ai un TreeLoader qui me permet de créer les nœuds d'un TreePanel à l'aide d'une requête Ajax (avec du JSON). Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var agentsTreeRoot = new Ext.tree.AsyncTreeNode();
    var agentsTreeLoader = new Ext.tree.TreeLoader({
      url: 'person/index',
    });
     
    var AgentsTreePanel = new Ext.tree.TreePanel({
      id: 'treepanel-agents',
      title: 'Agents',
      root: agentsTreeRoot,
      rootVisible: false,
      iconCls: 'menu-agents',
      loader: agentsTreeLoader
    });
    tel quel, le résultat me pose deux problèmes. Au lieu de me créer une seule fois les nœuds (j'affiche une liste de personne), j'ai le droit à un truc assez bizarre. Chaque nœud contient des fils (la même liste), qui contiennent des fils, etc. à l'infini. Je voudrais évidemment me limiter à un seul affichage.

    De plus, je souhaiterai personnaliser les nœuds pour leur donner une icone personnalisé comme je peux faire dans un panel où j'ajoute mes nœuds individuellement (via la propriété iconCls)

  2. #2
    Invité
    Invité(e)
    Par défaut
    j'ai eu ma réponse tout seul au final, au prix de pas mal de recherches, alors qu'au final, c'est vraiment simple.

    On surcharge la méthode createNode(). Et là on peut accéder à la config des nœuds créés dynamiquement. Leaf à true permet de ne pas avoir de fils. On accède aux propriétés d'un node normal et on peut tout faire donc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var agentsTreeLoader = new Ext.tree.TreeLoader({
      url: 'person/index',
      createNode: function(attr){
        attr.iconCls = 'item-agents';
        attr.leaf = true;
        attr.text = attr.lastname+' '+attr.firstname;
        return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
      }
    });

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Oui c'est exact, et dis toi que c'est valable pour tous les composants Extjs. Tu peux leur attribuer des attributs de ton choix et y accéder de la même façon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var mon panel = new Ext.Panel({
    id: 'monId',
    titre: 'monTitre',
    monAttribut: 'Hello'
    });
     
    alert(panel.monAttribut) //Te retournera 'Hello'

  4. #4
    Invité
    Invité(e)
    Par défaut
    Mais alors si je veux ajouter un listerner on click à chaque node que je crée de cette manière, je dois faire comment ?

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Il te suffit de définir l'évènement directement sur ton TreePanel

  6. #6
    Invité
    Invité(e)
    Par défaut
    si je peux me permettre, le "il suffit" je le trouve un poil exagéré. Ma solution du coup c'est ça, mais je la trouve loin d'être instinctive du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MonPanel.initEvents = function() {
      this.on('click', function(n){
        .....
      }, this);
    };

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

Discussions similaires

  1. Cours : algorithmes et récursivité
    Par Community Management dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/10/2018, 00h38
  2. [langage] personnaliser le tri
    Par schnecke dans le forum Langage
    Réponses: 3
    Dernier message: 24/03/2004, 15h14
  3. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13
  4. [FLASH MX2004] Personnaliser les scrollbars
    Par stephane eyskens dans le forum Flash
    Réponses: 10
    Dernier message: 09/10/2003, 12h53
  5. [VB6] [UserControl] Évènements personnalisés
    Par Frankywinky dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2003, 17h56

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